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 キーを送信する方法があるかもしれないですけど、今のところはこの方法で実現しておくことにしました。
[ もどる ]