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.

49voto

FBente Punkte 2080

Swift 4

Richten Sie Ihr UIViewController mit dieser Erweiterungsmethode einmal ein, z. B. in viewDidLoad:

override func viewDidLoad() {
    super.viewDidLoad()
    self.setupHideKeyboardOnTap()
}

und die Tastatur wird auch durch Tippen auf die NavigationBar ausgeblendet.

import UIKit
extension UIViewController {
    /// Rufen Sie dies einmal auf, um geöffnete Tastaturen durch Tippen irgendwo im View-Controller zu schließen
    func setupHideKeyboardOnTap() {
        self.view.addGestureRecognizer(self.endEditingRecognizer())
        self.navigationController?.navigationBar.addGestureRecognizer(self.endEditingRecognizer())
    }

    /// Blendet die Tastatur von self.view aus
    private func endEditingRecognizer() -> UIGestureRecognizer {
        let tap = UITapGestureRecognizer(target: self.view, action: #selector(self.view.endEditing(_:)))
        tap.cancelsTouchesInView = false
        return tap
    }
}

28voto

Rob Punkte 4889

Swift-Version, das funktioniert in Kombination mit anderen Elementen (wie einem UIButton oder einem anderen UITextField):

override func viewDidLoad() {
    super.viewDidLoad()

    let tapper = UITapGestureRecognizer(target: self, action:#selector(endEditing))
    tapper.cancelsTouchesInView = false
    view.addGestureRecognizer(tapper)
}

17voto

Mr H Punkte 5214

Wie wäre es damit: Ich weiß, dass dies ein alter Beitrag ist. Es könnte jemandem helfen :)

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {  
    NSArray *subviews = [self.view subviews];
    for (id objects in subviews) {
        if ([objects isKindOfClass:[UITextField class]]) {
            UITextField *theTextField = objects;
            if ([objects isFirstResponder]) {
                [theTextField resignFirstResponder];
            }
        } 
    }
}

17voto

eduludi Punkte 1568

Dies ist eine gute generische Lösung:

Objective-C:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];    
}

Swift:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    self.view.endEditing(true)
}

Basierend auf der Lösung von @icodebuster: https://stackoverflow.com/a/18756253/417652

15voto

newDeveloper Punkte 1355

Swift 4 Einzeiler

view.addGestureRecognizer(UITapGestureRecognizer(target: view, action: #selector(UIView.endEditing(_:))))

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