【Swift】UITextFieldのデリゲートメソッドが呼び出されるタイミングを確認する。(Swift 2.1、XCode 7.2)

2020年6月16日

UITextFieldのデリゲートメソッド

前回の記事でUITextFiledDelegateプロトコルに定義されているメソッドの一覧を「Jump to Definition」を利用して調べた。⇒「記事

そこで、本記事ではUITextFieldDelegateプロトコルに定義されているメソッドの実行タイミングを確認しておくことにする。

UITextFieldDelegateプロトコルに定義されているメソッド

 

textFieldShouldBeginEditingメソッド

テキストフィールドをタップして文字が入力可能になる直前にメソッドが呼び出される。戻り値にtrueを返せば文字が入力可能な状態になり、falseを返せば入力不可としてキーボードは表示されない。

 

textFieldDidBeginEditingメソッド

テキストフィールドをタップして文字が入力可能になった直後にメソッドが呼び出される。このように、デリゲートメソッドにはメソッド名の中にShouldまたはDidが含まれるものが多い。

Shouldは直前、Didは直後と覚えておけば、どのタイミングで呼ばれるのかをイメージしやすい。

このメソッドはDidなので Shouldよりもあとに実行される。なので、以下のコードを実行した場合、ラベルには「入力開始後に呼び出し」が表示される。

 

textFieldShouldEndEditingメソッド

Returnキーを押してテキストフィールドの入力が完了する前にメソッドが呼び出される。戻り値にtrueを返した場合はそのまま入力完了となり、falseを返せば入力完了を拒否するためキーボードは表示されたままになる。

 

textFieldDidEndEditingメソッド

Returnキーを押してテキストフィールドの入力が完了した後にメソッドが呼び出される。Shouldのメソッドよりもあとに実行されるので、以下のコードを実行した場合、ラベルには「入力完了後に呼び出し」が表示される。

textFieldメソッド

テキストフィールドの値が変更される度にメソッドが呼び出される。第1引数には変更前の文字列、第2引数には変更される文字列のインデックス範囲、第3引数には新しい文字列が渡ってくる。戻り値にtrueを返せばテキストフィールドへの入力が確定し、falseを返せば入力確定を拒否する。

 

textFieldShouldClearメソッド

クリアボタンを押してテキストフィールドの文字列がクリアされる直前にメソッドが呼び出される。

クリアボタンとは、テキストフィールドの右端に表示されている×ボタンのことで、最初は非表示に設定されている。表示するには、テキストフィールドの部品をクリックしてから、画面右側のアトリビュートインスペクタボタン(下図黄枠)をクリックし、下図赤枠のClear Buttonの設定を「Is always visible」などに変更する。
クリアボタンを表示する設定

 

textFieldShouldReturnメソッド

Returnキーを押したと判定される直前にメソッドが呼び出される。先ほど説明したtextFieldShouldEndEditingメソッドtextFieldDidEndEditingメソッドはendEditingメソッドが実行された段階で呼び出されるので、以下のコードを実行した場合、ラベルには「キーボードを閉じた後」が表示される。

また、「キーボードを閉じた後」に設定するコードを削除して実行すると「入力完了前に呼び出し」が表示される。