[swift]UITextFiledでキーボード以外タップでキーボードを非表示にする

細かなUIがUXを向上することはよくあります。

今日ご紹介するTipsはUITextFiledでキーボード以外の領域をタップしたときにキーボードを非表示にする方法です。

Lineなどのメッセンジャーアプリなどでは、キーボード以外の領域をタップした時にキーボードが非表示になるUIがしばしばあります。

Lineキャプチャ1

Lineキャプチャ2

このUIを作ってみましょう

実装方法

実装方法はとっても簡単。
ViewControllerのサブクラスにtouchesBeganメソッドをオーバーライドし、以下のコードを書くだけです。
今回はstoryboardからtextFieldというUITextFieldをつなげている想定です。

    //ViewController.swift

    //TextFiledをstoryboardからつなげておく
    @IBOutlet weak var textField: UITextField!

    //MARK: キーボードが出ている状態で、キーボード以外をタップしたらキーボードを閉じる
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        //非表示にする。
        if(textField.isFirstResponder()){
            textField.resignFirstResponder()
        }
        
    }
        

解説

textField.isFirstResponder()textFileldがファーストレスポンダーなのか(最初にタッチイベント等に応答するオブジェクトなのかどうか)を判断しています。

ここがtrueのキーボードが表示されていると判断できます。
textField.resignFirstResponder()でファーストレスポンダーを解除させます。
そうすればキーボードが非表示になります。

以上です。
何かのお役に立てれば嬉しいです!

参考