0

各セルの uitableview では、ユーザーがテキストフィールドを編集すると uitextfield が表示され、画面上の他のボタンを押した後、キーボードは辞任しません。テキストフィールドデリゲートで次のことを行いました

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    textfieldInCell = textField;
}

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    textfieldInCell=nil;// this is the ivar i am using for each textfield in cell.
    return YES;
}

-(void)textFieldDidEndEditing:(UITextField *)textField
{
    textfieldInCell=textField;
    // do the process...
    textfieldInCell=nil
}

ユーザーが他のボタンをタップしても、キーボードが辞任していない場合は、 shouldReturn デリゲート関数も呼び出しています。どこが間違っていますか?

4

5 に答える 5

0

テキストフィールドのデリゲートをコントローラーにバインドしましたか? または、textFieldShouldReturn 呼び出しかどうかを確認しましたか?

あなたの場合、ビューコントローラーでバインディングが欠落していると思います。

ありがとう

于 2012-11-27T05:46:11.123 に答える
0

テキストフィールドを追加するテーブルビューに行を追加します。

<YOUR_TEXTFIELD>.delegate = YES;

プログラミングを楽しむ

于 2012-11-27T05:48:19.107 に答える
0

最初にデリゲートを与えるかどうかを確認し、UITextFieldその後、その時点でボタンのメソッドを呼び出すときにデリゲートを与えると、次のようにこのテキストフィールドを辞任します...

-(IBAction)yourButton_Clicked(id)sender{

   [yourTextField resignFirstResponder];
   ////your code write here

}
于 2012-11-27T05:50:53.037 に答える
0

ビューコントローラーで作成した各テキストフィールドのデリゲートをバインドし、テキストフィールドに1行のコードを追加して編集を終了したことを確認してください:-

-(void)textFieldDidEndEditing:(UITextField *)textField
{
   // add the following line
   [textField resignFirstResponder];
   textfieldInCell=textField;
   // do the process...
    textfieldInCell=nil 

}
于 2012-11-27T05:56:34.690 に答える
0

タグ値をテキストフィールドに割り当ててから、そのタグを使用してこのようにキーボードを非表示にするメソッドを返す必要があります(タグ-1を割り当てた場合)

-(void)textFieldDidEndEditing:(UITextField *)textField{
    if(textField.tag==-1){
     [textField resignFirstResponder];
     }

}
于 2012-11-27T06:38:06.543 に答える