Ich frage mich, wie man die Tastatur verschwinden lassen kann, wenn der Benutzer außerhalb eines UITextField
tippt.
Antworten
Zu viele Anzeigen?Sie müssen einen UITapGestureRecognizer
hinzufügen und ihn der Ansicht zuweisen, und dann resign first responder auf dem UITextField
auf seinem Selektor aufrufen.
Der Code:
In viewDidLoad
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:tap];
In dismissKeyboard:
-(void)dismissKeyboard
{
[aTextField resignFirstResponder];
}
(Wo aTextField
das Textfeld ist, das für die Tastatur verantwortlich ist)
Swift 3 Version sieht so aus
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard (_:)))
self.view.addGestureRecognizer(tapGesture)
Für dismissKeyboard
@objc func dismissKeyboard (_ sender: UITapGestureRecognizer) {
aTextField.resignFirstResponder()
}
Ich habe ein paar Antworten zusammengeführt.
Verwenden Sie ein ivar, das während des viewDidLoad:
initialisiert wird
UIGestureRecognizer *tapper;
- (void)viewDidLoad
{
[super viewDidLoad];
tapper = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(handleSingleTap:)];
tapper.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:tapper];
}
Beenden Sie alles, was gerade bearbeitet wird:
- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
[self.view endEditing:YES];
}
Überprüfen Sie dies, dies wäre der einfachste Weg, um das zu tun,
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
[self.view endEditing:YES];// das wird den Trick tun
}
Oder
Diese Bibliothek übernimmt das Einbeziehen von Scrollbar-Automatischem Scrollen, Tippen auf die Leertaste, um die Tastatur auszublenden, usw...
Ich sehe, dass einige Leute Probleme haben, die UITapGestureRecognizer
Methode zu verwenden. Der einfachste Weg, den ich diese Funktionalität erreicht habe, während ich das Tippverhalten meiner vorhandenen Schaltflächen intakt gelassen habe, besteht darin, nur eine Zeile zu @Jensen2k's Antwort hinzuzufügen:
[tap setCancelsTouchesInView:NO];
Dies ermöglichte es meinen vorhandenen Schaltflächen weiterhin zu funktionieren, ohne @Dmitry Sitnikov's Methode zu verwenden.
Erfahren Sie mehr über diese Eigenschaft
hier (suchen Sie nach CancelsTouchesInView
): UIGestureRecognizer Klassenreferenz
Ich bin mir nicht sicher, wie es mit Bildlaufleisten funktionieren würde, da ich sehe, dass einige Probleme damit hatten, aber hoffentlich wird jemand anderes auf das gleiche Szenario stoßen, das ich hatte.
- See previous answers
- Weitere Antworten anzeigen
8 Stimmen
Dmitry hatte die richtige Antwort. Dies ist kein Gestenproblem - es handelt sich um ein Problem beim Zurücktreten des ersten Responders. Die Antwort von Dmitry ist auch die von Mark, Nutting und LeMarche in Beginning iOS 4 Development, Kapitel 4, Seite 83 empfohlene Lösung.