2017-02-26 2 views
0

Ich habe den folgenden Code in einem benutzerdefinierten UIViewController:UITapGestureRecognizer Brennen nicht in Swift 3

let tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap)) 

func dismissTap() { 

    print("Tap!") 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.view.addGestureRecognizer(tapDismissTextField) 
    self.friendsView.addGestureRecognizer(tapDismissTextField) 
} 

Nein "Tippen" Zeilen werden gedruckt, sodass die Gestenerkennung nicht ausgelöst wird. Was könnte schief gehen?

Benutzerinteraktion aktiviert ist true über alle Ansichten in diesem Controller.

Dieser View-Controller ist in eine UINavigationController eingebettet, wenn das hilfreich ist.

+0

Dies ist nicht die richtige Syntax, noch weiß ich, wie Ihr Code keinen Fehler verursacht, weil es keinen 'UITapGestureRecogniser' gibt, gibt es nur' UITapGestureRecognizer' (mit 'z' anstelle von' s') –

+0

Entschuldigungen, die sind alle mit az – Legatro

+0

jetzt, es ist besser. Rechtschreibung ist sehr wichtig. –

Antwort

1

Sie müssen Self nur zuweisen, sobald Ihre Ansicht geladen ist.

var tapDismissTextField: UITapGestureRecognizer! 

und in Ihrem viewDidLoad Methode:

override func viewDidLoad() { 
    super.viewDidLoad() 
    tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap)) 
    view.addGestureRecognizer(tapDismissTextField) 
} 
1

1. verschieben diese Zeile:

let tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap)) 

innen viewDidLoad(), weil self außerhalb der Methoden/Funktion/Verschlüsse gibt ein (NSObject) ->() -> YourClass() (ein NSObject), nicht Ihre Klasse, die tatsächlich der Besitzer von view ist.

2. Ich empfehle, so dass nur eine Ansicht der GestureRecognizer

1

hinzufügen tapDismissTextField in viewdid Last

override func viewDidLoad() { 
    super.viewDidLoad() 
let tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap)) 
    self.view.addGestureRecognizer(tapDismissTextField) 
    self.friendsView.addGestureRecognizer(tapDismissTextField) 
} 
0

Dies ist nicht der richtige Weg Aktionen auf dem UITextField zu bekommen. Ich nehme an, Sie haben die setUserInteraction zu false geändert, um zu verhindern, UITextField Verhalten. Recht? Deshalb funktioniert Ihre Gestenerkennung nicht.

Also, Sie müssen geben, wie Sie sehen, wir sind jetzt in einem Dilemma. Wir möchten, dass die Geste funktioniert und dass das UITextField sich nicht normal verhält. Wir müssen wissen, was Sie erreichen wollen, um Ihnen besser zu helfen.

Info:

Wenn Sie eine benutzerdefinierte Ansicht zeigen wonna. zum Beispiel UIPickerView setzen Sie die inputView Eigenschaft für Ihre UITextField und entfernen Sie Ihre Geste recognizer.

Umgehen:

können Sie die auf UITextField Supertippgeste verwenden. Und versuchen Sie, festzustellen, ob der Wasserhahn innerhalb des Rahmens der UITextField ist. example

Eine weitere Arbeit um:

Versuchen Sie, Ihre Aktion auf dem textFieldDidBeginEditting Delegierten Methode zu tun. Und mach ein paar Verbesserungen, um die Tastatur zu deaktivieren. kann die inputView auf Null setzen.

Also, wir müssen genau wissen, was Sie erreichen wollen, um Ihnen die richtige Lösung zu geben.

Verwandte Themen