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?

1513voto

Esqarrouth Punkte 36621
override func viewDidLoad() {
    super.viewDidLoad()

    //Sucht nach einzelnen oder mehrfachen Fingertipps.
     let tippen = UITapGestureRecognizer(ziel: self, aktion: #selector(UIInputViewController.dismissKeyboard))

    //Entkommentieren Sie die unten stehende Zeile, wenn Sie nicht möchten, dass der Fingertipp andere Interaktionen beeinträchtigt oder abbricht.
    //tippen.cancelsTouchesInView = false 

    view.addGestureRecognizer(tippen)
}

//Ruft diese Funktion auf, wenn der Fingertipp erkannt wird.
@objc func dismissKeyboard() {
    //Bewirkt, dass die Ansicht (oder eines ihrer eingebetteten Textfelder) den Status des ersten Responders aufgibt.
    view.endEditing(true)
}

Hier ist eine andere Möglichkeit, diese Aufgabe zu erledigen, wenn Sie diese Funktionalität in mehreren UIViewControllern verwenden möchten:

// Platziere diesen Code überall, wo du möchtest
erweiterung UIViewController {
    func hideKeyboardWhenTappedAround() {
        let tippen = UITapGestureRecognizer(ziel: self, aktion: #selector(UIViewController.dismissKeyboard))
        tippen.cancelsTouchesInView = false            
        view.addGestureRecognizer(tippen)
    }

    @objc func dismissKeyboard() {
        view.endEditing(true)
    }
}

Jetzt musst du in jedem UIViewController nur noch diese Funktion aufrufen:

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

Diese Funktion ist als Standardfunktion in meinem Repository enthalten, das viele nützliche Swift-Erweiterungen wie diese enthält, schau es dir an: https://github.com/goktugyil/EZSwiftExtensions

137voto

King-Wizard Punkte 15270

Die Antwort auf Ihre Frage, wie Sie die Tastatur in Xcode 6.1 unter Verwendung von Swift ausblenden können, lautet unten:

import UIKit

class ItemViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet var textFieldItemName: UITextField!

    @IBOutlet var textFieldQt: UITextField!

    @IBOutlet var textFieldMoreInfo: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        textFieldItemName.delegate = self
        textFieldQt.delegate = self
        textFieldMoreInfo.delegate = self
    }

                       ...

    /**
     * Wird aufgerufen, wenn die 'Return'-Taste gedrückt wird. Gib 'true' zurück, um zu bestätigen.
     */
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }

   /**
    * Wird aufgerufen, wenn der Benutzer auf die Ansicht (ausserhalb des UITextField) klickt.
    */
    override func touchesBegan(touches: Set, withEvent event: UIEvent?) {
        self.view.endEditing(true)
    }

}

(Quelle dieser Informationen).

63voto

Fahim Parkar Punkte 29820

Swift 4 arbeiten

Erstellen Sie die Erweiterung wie unten & rufen Sie hideKeyboardWhenTappedAround() in Ihrem Basiskontroller auf.

//
//  UIViewController+Extension.swift
//  Projektname
//
//  Erstellt von ABC am 2.3.18.
//  Urheberrecht © 2018 ABC. Alle Rechte vorbehalten.
//

import UIKit

extension UIViewController {
    func hideKeyboardWhenTappedAround() {
        let tapGesture = UITapGestureRecognizer(target: self, 
                         action: #selector(hideKeyboard))
        view.addGestureRecognizer(tapGesture)
    }

    @objc func hideKeyboard() {
        view.endEditing(true)
    }
}

Das Wichtigste, was in Ihrem Basiskontroller aufgerufen werden muss, damit nicht jedes Mal in allen Ansichtscontrollern aufgerufen werden muss.

39voto

Dash Punkte 16718

Sie können anrufen

resignFirstResponder()

auf einer Instanz eines UIResponder, wie z.B. einem UITextField. Wenn Sie es auf der Ansicht aufrufen, die gerade die Tastatur anzeigen lässt, wird die Tastatur ausgeblendet.

34voto

William Hu Punkte 14260

swift 5 sind nur zwei Zeilen ausreichend. Füge sie in dein viewDidLoad ein und es sollte funktionieren.

 let tapGesture = UITapGestureRecognizer(target: view, action: #selector(UIView.endEditing))
 view.addGestureRecognizer(tapGesture)

Wenn dein Tap-Gesture andere Berührungen blockiert, füge diese Zeile hinzu:

tapGesture.cancelsTouchesInView = false

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