493 Stimmen

IOS - Tastatur ausblenden, wenn außerhalb des UITextField getippt wird

Ich frage mich, wie man die Tastatur verschwinden lassen kann, wenn der Benutzer außerhalb eines UITextField tippt.

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.

792voto

Jensen2k Punkte 8358

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()
}

181voto

drewish Punkte 8567

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];
}

107voto

Prasad De Zoysa Punkte 2427

Ü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...

https://github.com/michaeltyson/TPKeyboardAvoiding

90voto

Joey Punkte 1075

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.

56voto

fo2rist Punkte 1873

Es ist besser, dein UIView als Instanz von UIControl zu erstellen (im Interface Builder) und dann ihr TouchUpInside Ereignis mit der Methode dismissKeyboard zu verbinden. Diese IBAction Methode wird so aussehen:

- (IBAction)dismissKeyboard:(id)sender {
    [aTextBox resignFirstResponder];
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X