2

textFieldDone:戻るボタンがタップされたときにカーソルを次のテキストフィールドに移動することを想定したメソッドを作成しました。

- (IBAction)textFieldDone:(id)sender {
     [nextTextField becomeFirstResponder];
     NSLog(@"in : textFieldDone");
}

最初のテキストフィールドの「Did End On Exit」イベントをファイルの所有者に接続し、textFieldDone:方法を選択しました。また、ファイルの所有者をテキストフィールドのデリゲートとして割り当てました(キーボードがテキストフィールドを非表示にしないように、それに応じてビューを上下にスクロールする必要があるため)。

シミュレーターでアプリを実行し、戻るボタンをタップすると、最初のテキストフィールドがファーストレスポンダーを辞任し、ログでプログラムがtextFieldDone:メソッドを通過しなかったことがわかりますが、メソッドを通過しましたtextFieldDidEndEditing:

以前はその方法を使用していましたが、問題はありませんでした。

ファイルの所有者がテキストフィールドの代理人であるためですか?

4

3 に答える 3

3

あなたは上に書く必要があります

- (BOOL) textFieldShouldReturn:(UITextField*) textField

次のテキスト フィールドに移動します。

サンプルコード:

-(BOOL) textFieldShouldReturn:(UITextField*) textField 
{
    if (textField == txt1)
    {
        [txt1 resignFirstResponder];
        [txt2 becomeFirstResponder];
    }
    if (textField == txt2)
    {
        [txt2 resignFirstResponder];
    }
    return YES;
}

UITextFieldDelegateUITextfieldにデリゲートを追加することを忘れないでください。

于 2012-12-20T12:49:21.257 に答える
1
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    if ([textField isEqual:txt1]) 
    {
        [txt2 becomeFirstResponder];
    }
    return true;    
}
于 2012-12-20T12:42:58.670 に答える
1

上記の答えは正しいですが、これをより一般的にするには、タグオプションを使用する必要があります

UITextField *txt1;
txt1.tag=1;
UITextField *txt2;
txt2.tag=2;
UITextField *txt3;
txt3.tag=3;
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    if ([[textField superview] viewWithTag:textField.tag+1])
        {
        [[[textField superview] viewWithTag:textField.tag+1] becomeFirstResponder];
        }
    else{  [textField resignFirstResponder];
    }
    return true;
}

注: タグ 0 と一緒に使用しないでください。デフォルトではtextFieldすべてsubViewsタグ = 0 であるためです。

于 2012-12-20T12:58:37.800 に答える