509 Stimmen

Schließen Sie die iOS-Tastatur, indem Sie überall mit Swift berühren.

Ich habe überall danach gesucht, aber ich kann es einfach nicht finden. Ich weiß, wie man die Tastatur mit Objective-C ausblendet, aber ich habe keine Ahnung, wie man das mit Swift macht. Weiß das jemand?

13voto

Artem Punkte 324

Nur eine Codezeile im viewDidLoad() Methode:

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

11voto

modocache Punkte 6298

Die Antwort von Dash ist korrekt und bevorzugt. Ein mehr "verbrannte Erde" Ansatz ist es, view.endEditing(true) aufzurufen. Dies bewirkt, dass view und alle seine Unteransichten resignFirstResponder. Wenn Sie keine Referenz auf die Ansicht haben, die Sie schließen möchten, ist dies eine hacky, aber effektive Lösung.

Beachten Sie, dass ich persönlich der Meinung bin, dass Sie eine Referenz auf die Ansicht haben sollten, die Sie als erstes responder zurücktreten möchten. .endEditing(force: Bool) ist ein barbarischer Ansatz; Bitte benutze es nicht.

11voto

Luke Harries Punkte 121

Ich habe die beste Lösung gefunden, die die akzeptierte Antwort von @Esqarrouth beinhaltet, mit einigen Anpassungen:

extension UIViewController {
    func hideKeyboardWhenTappedAround() {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboardView")
        tap.cancelsTouchesInView = false
        view.addGestureRecognizer(tap)
    }

    func dismissKeyboardView() {
        view.endEditing(true)
    }
}

Die Zeile tap.cancelsTouchesInView = false war entscheidend: Sie stellt sicher, dass der UITapGestureRecognizer nicht verhindert, dass andere Elemente auf der Ansicht Benutzerinteraktionen erhalten.

Die Methode dismissKeyboard() wurde in dismissKeyboardView() geändert. Dies liegt daran, dass in der ziemlich alten Codebasis meines Projekts bereits häufig dismissKeyboard() verwendet wurde (ich stelle mir vor, dass dies nicht ungewöhnlich ist), was zu Compilerproblemen führte.

Dann kann dieses Verhalten, wie oben gezeigt, in einzelnen View-Controllern aktiviert werden:

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

11voto

Sukh Punkte 1318

Ich habe IQKeyBoardManagerSwift für die Tastatur verwendet. es ist einfach zu verwenden. Fügen Sie einfach pod 'IQKeyboardManagerSwift' hinzu

Importieren Sie IQKeyboardManagerSwift und schreiben Sie den Code in didFinishLaunchingWithOptions im AppDelegate.

///füge diese Zeile hinzu 
IQKeyboardManager.shared.shouldResignOnTouchOutside = true
IQKeyboardManager.shared.enable = true

10voto

David Seek Punkte 16148

Swift 3:

Erweiterung mit Selector als Parameter, um zusätzliche Vorgänge in der Dismiss-Funktion durchführen zu können und cancelsTouchesInView, um Verzerrungen bei Berührungen auf anderen Elementen der Ansicht zu verhindern.

extension UIViewController {
    func hideKeyboardOnTap(_ selector: Selector) {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: selector)
        tap.cancelsTouchesInView = false
        view.addGestureRecognizer(tap)
    }
}

Verwendung:

override func viewDidLoad() {
    super.viewDidLoad()
    self.hideKeyboardOnTap(#selector(self.dismissKeyboard))
}

func dismissKeyboard() {
    view.endEditing(true)
    // Zusätzliche Vorgänge durchführen
}

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