[iPhone] UITextField キーボードを閉じる (Objective-C)

文字を入力するためのUIとしてUITextField がありますが、これはソフトキーボードが自動では閉じません。キーボードの閉じる方法を3つ考えてみます。


Objective-C
Xcode 9.4

UITextField キーボードを閉じる

UITextFieldのキーボードを閉じる方法は様々なケースに応じて以下の3つが考えられます。

resignFirstResponderを設定

キーボートを閉じる操作は自動ではやってくれない仕様になっていますが、フォーカスを外せばキーボードは隠れます。
resignFirstResponder()はフォーカスされている状態を外すためのメソッドです。

textFieldShouldReturnは「Return」や「改行」などのキーをタップした時に呼ばれますので、そのタイミングでresignFirstResponder()を設定するとキーボードを閉じることができます。

Storyboard に UITextField を配置して、入力した文字を表示する Label を下に置きます。見やすくするため Inspector area で背景をそれぞれグレーに設定します。

 

文字を Text Field に入力して、それを Label に表示するアプリを簡単に作ってみます。


UITextFieldDelegate を設定して Text Field のデータを受け取ります。
ViewController.h


Delegate で受け取ったデータを TextField に渡し、
ラベルの文字として代入して、それが終わったらキーボードを閉じます。

ViewController.m



storyboard の UITextField と UILabel をView Controller Scene に接続します。
ビルド実行すると、 TextField の入力文字が Label に反映されたと思います。

Did End On Exit を設定

別の方法としてstoryboardの設定と簡単なコードで実現するやり方です。



TextField は Referencing Outlet で textField に接続していますが
Set Events の Did End On Exit で IBAction としても接続します。

ViewController.h

ViewController.m


とてもシンプルになりました。

ボタン等でendEditingを使う方法

UIViewController を使っている場合であれば
[self.view endEditing:YES];
のようにしてキーボードを閉じることができます。

ViewController.h


ViewController.m


ボタン・アクションを紐付けします。



実際はボタンではなく別のタイミング(画面遷移)などをトリガーにする方が自然かもしれません。キーボードの「改行」「Return」をユーザーが使わないケースが多いのでこれを使って入力を保存することが必要な場合があります。


尚、Swift のケースはこちらです。

UITextField は文字を入力するためのUIですが、キーボードは自動的には閉じません。ここでは、キーボードの閉じる方法を3例紹介します…

References:
UITextField — UIKit | Apple Developer Documentation
resignFirstResponder() — UIResponder | Apple Developer Documentation