[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()でファーストレスポンダーを解除させます。 そうすればキーボードが非表示になります。

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

参考