UITextField に Enter キーを送信する : Objective-C プログラミング

PROGRAM


UITextField に Return キーを送信する

たとえば、何かボタンが押された際に、とある UITextField の Return キーが押されたことにしたいとします。

UITextField は、テキスト編集に関する機能を UITextInput プロトコルや、UITextInputDelegate プロトコル、UITextInputTreats プロトコル、UIKeyInput プロトコルといったプロトコルに準拠する形で実装されています。

 

Return キーを入力したことにしたい場合には、次のようにすれば良いようでした。

// UITextField に改行文字を送ります。

[aTextField insertText:@"\n"];

このように insertText: メソッドに改行文字を渡すことで、UIKeyboard キーボードの Return が押された時と同じように、"Did End On Exit" イベントなどの処理に遷ることができるようでした。

ちなみに Return キーを押された際の UITextField の挙動については UITextField のイベントやデリゲートの流れ で軽くまとめてあります。

キーボードからの入力と同じような処理にする

ただ、この方法だと、UITextFieldDelegate の "textField:shouldChangeCharactersInRange:replacementString:" メソッドが呼び出されない様子でした。

キーボードからの Return キー入力の場合、まず最初に "textField:shouldChangeCharactersInRange:replacementString:" メソッドが呼び出されて、そこで受け入れ可能と判断された場合にのみ、Return キーが押されたものとして扱われる感じです。

 

キーボードの Return キーと同じような動作を期待する場合には、次のようにして自分で "textField:shouldChangeCharactersInRange:replacementString:" メソッドを呼び出して、その戻り値が YES の場合に "\n" を送信するという流れにする必要がありそうです。

BOOL canSendReturn;

 

// キー入力を受け入れ可能かどうかを判定します。

if ([aTextField.delegate respondsToSelector:@selector(textField:shouldChangeCharactersInRange:replacementString:)])

{

// キー入力を判定可能な場合は、判定結果に応じて Return キーを受け入れるかどうかを判断します。

NSRange range;

 

range.location = aTextField.text.length;

range.length = 0;

 

canSendReturn = [aTextField.delegate textField:aTextField shouldChangeCharactersInRange:range replacementString:@"\n"];

}

else

{

// 判定メソッドが実装されていない場合は、受け入れ可能とします。

canSendReturn = YES;

}

 

if (canSendReturn)

{

// UITextField に改行文字を送ります。

[aTextField insertText:@"\n"];

}

このようにすることで、Return キーが入力可能であるかを判定した上で、可能であればそれを送信するという、キーボードからの入力と同じような流れで、プログラムの実行の流れを進めることができると思います。

もしかするともっと別の単純な方法で、キーボードから Return キーを入力した時と同じ流れで Return キーを送信する方法があるかもしれないですけど、今のところはこの方法で実現しておくことにしました。

[ もどる ]