2016-10-05 8 views
4

キーボードがポップアップされている別のviewControllerに複数のtextFieldがあります。アプリ全体に触れるときにキーボードを消す方法

ユーザーが画面の別の部分をクリックしたときにキーボードを閉じる方法を知っていますが、アプリのすべてのコーナーにハードコードしたくありません。

のでキーボードは、ユーザーがキーボード以外の画面上の任意の場所をクリックしたときにキーボードがアプリ上のどこでもを却下なっ強制する方法はありますか?

私はUIViewControllerを拡張することを考えていましたが、私はサブビューとして追加するビューの中にいくつかのtextFieldも持っています。おそらく、TextFieldクラスそのものを拡張することは可能でしょうか?

答えて

4

ベースUIViewControllerを作成し、それぞれのViewControllerで継承させることをお勧めします。

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

か、基本ViewController- -in のviewDidLoadをオーバーライドし、次のように、ビューにUITapGestureRecognizerを追加することができます:

あなたが使用することもでき
override func viewDidLoad() { 
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(Base.endEditing)) 
    view.addGestureRecognizer(tapGesture) 
} 

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

これは、費用ゼロのSwift Extensionsで行うこともできます。すべてのUIViewControllerをリファクタリングする必要はありません – midori

+0

ボタンを持つviewControllerがあるとします。そして私は明らかにviewControllerのサブビューであるそのボタンをタップします。その後、viewControllerはもうメッセージを受け取らないので、キーボードはまだそこにあります。私は正しい? – Honey

+0

ボタンをタップしてもtouchesBeganが呼び出されない場合は、ボタンのアクションに「view.endEditing(true)」を追加することで解決できます。@IBAction func buttonTapped(送信者:AnyObject){ view.endEditing(true) } –

3

それでtouchesBeganメソッドをオーバーライドキーボードの解雇をすべてのユーザーに適用するには、View Controllerを拡張します。

extension UIViewController { 
    open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     self.view.endEditing(true) 
    } 
} 
関連する問題