0

私は多くの UItextField を持っており、アニメーションが気に入っています:

-(void)textFieldDidBeginEditing: (UITextField *)textField{
NSLog(@"sowing keyboard");

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.27];
scroll1.frame = CGRectMake(0, -604, 768, 1004);
[UIView commitAnimations];

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.47];
scroll2.frame = CGRectMake(0, 414, 768, 1004);
[UIView commitAnimations];



[UIView animateWithDuration:1.0
                 animations:^{ 
                     self.mapView.alpha=0.0;
                 } 
                 completion:^(BOOL finished){
                     self.mapView.hidden=YES;
                 }];


}

 -(void)textFieldDidEndEditing: (UITextField *)textField{
NSLog(@"hiding keyboard");

if (scroll2.frame.origin.y != 414) {

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.27];
scroll1.frame = CGRectMake(0, -340, 768, 1004);
[UIView commitAnimations];

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.47];
scroll2.frame = CGRectMake(0, 678, 768, 1004);
[UIView commitAnimations];

[self.mapView setHidden:NO];

//fade in
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationDelegate:self];

[self.mapView setAlpha:1.0];

[UIView commitAnimations];

    }
}

問題は、フィールドを編集しているときに、別のフィールドに触れて編集を開始すると、コード didEnd と DidBegin が呼び出されることです。どうすればそれを止めることができますか?? これらのアニメーションは、テキスト フィールドの編集を開始し、テキスト フィールドが編集されていない場合にのみ発生し、キーボードを非表示にする必要がある場合 (ユーザーが iPad で DownKey を押した場合) に DidEnd を実行したいと考えています。

何か案は??

私はこれを試しました:

if (scroll2.frame.origin.y != 414) {

...動作しますが、再実行キーを押してもアニメーションは発生しません。

4

1 に答える 1

1

問題の textField は、引数とともに自分自身を textFieldDidBeginEditing に送信します。

if () ブロックを追加して、textField1 と textField2 をテストします。

-(void)textFieldDidBeginEditing:(UITextField *)textField {
if (textField == textField1) {
    //do animation linked to textField1
}
if (textField == textField2) {
    //do animation linked to textField2
}
}

また、このメソッドを実装する必要があります

-(BOOL)textFieldShouldReturn:(UITextField *)textField {
    //handles the enter/done key
    //perform whatever action for when user touches return
    if (textField == textField1) {
        [textField2 becomeFirstResponder];
    } else {
        [textField1 becomeFirstResponder];
    }
    return YES or NO;
}
于 2012-09-07T15:13:42.620 に答える