2016-10-05 3 views
4

Ich habe mehrere textFields in verschiedenen viewControllern, wo die Tastatur aufgetaucht ist.So entfernen Sie die Tastatur beim Berühren der gesamten App

Ich weiß, wie man Tastatur entlässt, wenn Benutzer auf einen anderen Teil des Bildschirms klickt, aber ich möchte nicht gehen und es in jeder Ecke meiner App fest codieren.

So ist es trotzdem Tastatur bekommt Tastatur überall auf dem App entlassen zu erzwingen, wenn der Benutzer irgendwo auf dem Bildschirm andere als Tastatur klickt?

Ich habe überlegt, den UIViewController zu erweitern, aber ich habe auch einige TextFields in einer Ansicht, die ich als Unteransicht hinzufüge. Vielleicht könnte es irgendwie eine Erweiterung der TextField-Klasse geben?

Antwort

4

Ich schlage vor, eine BasisUIViewController zu erstellen und jeder Ihrer ViewControllers erben es; außer Kraft setzen touchesBegan Methode darin:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    view.endEditing(true) 
} 

oder Sie können viewDidLoad -in der Basis ViewController- außer Kraft setzen und eine UITapGestureRecognizer zu der Ansicht hinzufügen, wie folgt:

override func viewDidLoad() { 
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(Base.endEditing)) 
    view.addGestureRecognizer(tapGesture) 
} 

func endEditing() { 
    view.endEditing(true) 
} 
+2

Dies kann auch über Swift Extensions ohne Kosten erfolgen. Sie müssen nicht alle Ihre "UIViewController" umgestalten – midori

+0

Stellen Sie sich vor, ich habe eine ViewController, die eine Schaltfläche hat. Und ich tippe auf diesen Knopf, der offensichtlich eine Unteransicht des ViewControllers ist. Dann wird viewController keine Nachricht mehr erhalten, so dass die Tastatur immer noch da ist. Habe ich recht? – Honey

+0

Tippen auf eine Schaltfläche ruft keine touchesBegan auf, Sie können dies lösen, indem Sie "view.endEditing (true)" in der Aktion der Schaltfläche hinzufügen ... @IBAction func buttonTapped (sender: AnyObject) { view.endEditing (true) } –

3

Sie auch verwenden können eine Erweiterung eines View-Controllers, wenn Sie möchten, dass die Tastaturentlassung für alle gilt:

extension UIViewController { 
    open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     self.view.endEditing(true) 
    } 
} 
Verwandte Themen