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?
Antworten
Zu viele Anzeigen?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.
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()
}
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
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
}