UITextField で Return の入力時に処理を行う : Objective-C プログラミング

PROGRAM


UITextField で Return の入力時に処理を行う

UITextField で Return キーが入力されたときに何らかの処理を行う方法として、2 つの方法があるようでした。

なお、処理の流れを追っていて、なかなかややこしいところがあったので、その辺りについてを UITextField のイベントやデリゲートの流れ の方に整理してみました。こちらも参考にしながら、下のお話を追ってみると分かりやすくなるかもしれません。

textFieldShouldReturn: による方法

ひとつ目は UITextFieldDelegate の "textFieldShouldReturn:" メソッドを実装する方法です。

通常は、UITextField を配置した UIViewController のインターフェイスに UITextFieldDelegate を、次のように設定します。

// UIViewController の派生クラスのインターフェイスに UITextFieldDelegate を設定します。

@interface aViewController : UIViewController <UITextFieldDelegate>

{

このようにしたら、@implementation で "textFieldShouldReturn:" メソッドを実装します。

- (BOOL)textFieldShouldReturn:(UITextField*)textField

{

// 引き続き既定の動作を行わせたい場合に YES を返します。

return YES;

}

後はここで、Return が入力されたときに必要な処理を実装します。

ここで、戻り値として YES を返した場合には、既定の処理として引き続き、"Did End On Exit" イベントが発生して、それが実装されていればさらに "Editing Did End" イベントが発生する流れになるようです。最後にソフトウェアキーボードが非表示になります。

戻り値として NO を返した場合には、そのままそれ以上の処理はされない感じでした。ソフトウェアキーボードの表示もそのままです。

Did End On Exit イベントをハンドルする方法

もうひとつは Did End On Exit イベントをハンドルする方法です。

UITextField で Return を入力すると "Did End On Exit" イベントが発生するので、次のような IBAction に接続することで、Return が入力されて編集が終了した際の処理を記載することができます。

- (IBAction)actionDidEndOnExit:(id)sender

{

// ここで、編集状態が終了した後の処理を記載します。

 

}

注意点としては、この "Did End On Exit" を IBAction でハンドルすると、Return を押した後に、キーボードが自動で非表示になるというところでしょうか。

また、先ほどの UITextFieldDelegate の "textFieldShouldReturn:" メソッドで NO を返した場合には、このイベントは発生しないようで、このイベントに関連付けた IBActiom も呼び出されることはありませんでした。このとき、キーボードの表示状態も、隠されることなく表示され続ける感じでした。

[ もどる ]