0

MyUIButtonは、編集が完了するたびに消えるように設定されています。メソッドUITextFieldを呼び出しtextFieldDidEndEditing:て、ボタンをフェードアウトさせるだけです。最初のテキストフィールドをクリックせずに別のテキストフィールドに切り替えない限り、これはうまく機能します。たとえば、テキストフィールド A にいて、テキストフィールド B をタップすると、キーボードは起動したままになり、ボタンも起動したままになります。すべてのテキストフィールドの編集が完了した場合にのみ、このようなテキストフィールドの切り替えをカバーする方法があるとは思いません。私が間違っている?これが私のコードです:

-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField
{
negButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
negButton.frame = CGRectMake(textField.frame.origin.x, textField.frame.origin.y, 37, textField.frame.size.height);
[negButton setAlpha:0];

return YES;
}

-(void) textFieldDidBeginEditing:(UITextField *)textField
{
if ([textField isEditing])
{
    [UIView animateWithDuration:0.3 animations:^
     {
         field = textField;

         CGRect frame = textField.frame;

         frame.size.width -= 40;
         frame.origin.x += 40;

         [negButton setAlpha:1];
         [textField setFrame:frame];
         [self.view addSubview:negButton];
     }];
}
}

-(void) textFieldDidEndEditing:(UITextField *)textField
{
    [UIView animateWithDuration:0.3 animations:^
     {

         CGRect frame = textField.frame;
         frame.size.width += 40;
         frame.origin.x -= 40;

         [negButton setAlpha:0];

         [textField setFrame:frame];
     } 
     ];
}
4

2 に答える 2

1

に表示されるボタンを呼び出しているように思えます

textFieldShouldBeginEditing 

メソッドで問題ありません。

textFieldDidEndEditing 

メソッドでも結構です。別のテキスト ボックスに切り替えてもボタンが消えないのは、そのテキスト ボックスをタップすると、endEditingメソッドの直後にshouldBeginEditingメソッドが呼び出され、ボタンが削除された直後に再表示されるためです。

これが本来の動作方法です。別の方法で動作させたい場合は、各テキスト フィールドに固有のコードを作成する必要があります。

元:

- (BOOL)textFieldShouldBeginEditing:(UITextField*)textField
{
    if(textField == myField1)
    {
        //make button appear
    }
    else if(textField == myField2)
    {
        //Something else
    }
}

出来上がり!

于 2012-04-04T23:14:00.197 に答える
0

ここでの問題は、デリゲート メソッドが呼び出される順序です。

textField1 から textField2 に移動するとします。

textField1 がすでにアクティブで、textField2 をクリックすると、次のように呼び出されます。

textFieldShouldBeginEditing (textField2)
textFieldShouldEndEditing   (textField1)
textFieldDidEndEditing      (textField1)
textFieldDidBeginEditing    (textField2)

textField2 の横にボタンを作成し、代わりにその参照を保存することで、(textField1 の横にある) 「古い」ボタンへの参照を上書きする新しいボタンを作成しています。 次に、新しいボタンを呼び出します。negButtontextFieldShouldBeginEditingtextFieldDidEndEditingtextFieldDidBeginEditing

やりたいことは、現在のコードをtextFieldShouldBeginEditingの先頭に移動textFieldDidBeginEditingして、新しいボタンが作成される前に前の 2 つのメソッドが適切なボタンに作用するようにすることです。

于 2012-04-05T21:53:31.867 に答える