2011-01-13 14 views
1

私はAnthony Chan's questionと同様の問題を抱えています。UIAlertViewがresignFirstResponderを失敗させる原因となります

私のUIAlertViewとやりとりした後、私のアプリの別のビューでキーボードを閉じることができません。それは、アラートが私のUITextFieldのresignFirstResponderの能力を壊しているかのようです。以下で私のUIAlertViewをインスタンス化し、次にdidDismissWIthButtonIndexメソッドを呼び出します。次に、別のUIViewControllerをロードするshowInfoメソッドを呼び出します。

UIAlertView *emailFailAlert = [[UIAlertView alloc] initWithTitle:@"Error" 
          message:@"error message text." 
          delegate:self 
        cancelButtonTitle:@"Not now" 
        otherButtonTitles:@"Settings", nil]; 
[emailFailAlert setTag:2]; 
[emailFailAlert show]; 
[emailFailAlert release]; 

'設定' オプションが押されたら、私はこのメソッドを呼び出しています:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { 
    if ([alertView tag] == 2) {  
     if (buttonIndex == 1){  
      [self showInfo:nil]; 
     } 
    } 
} 

マイSHOWINFO方法は、以下のコードを経由して、他のViewControllerをロードします。

- (IBAction)showInfo:(id)sender { 
    FlipsideViewController *fscontroller = [[FlipsideViewController alloc] initWithNibName:@"FlipsideView" bundle:nil]; 
    fscontroller.delegate = self; 
    fscontroller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self presentModalViewController:fscontroller animated:YES]; 
    [fscontroller release]; 
} 

このFlipside VCで任意のtextFieldをクリックすると、私は通常通り- (BOOL)textFieldShouldReturn:(UITextField *)textField[textField resignFirstResponder]でキーボードを閉じることができません。私はこのコードを省略しましたが、この質問は長くなっていますが、必要であれば投稿することができます。

興味深いのは、ボタンがクリックされたときに[self showInfo:nil]コールをコメントアウトして(alertView didDismissWithButtonIndex:メソッドの外側の)テストボタンをクリックして呼び出すと、すべて正常に機能するという点です。ここで何が起こっているのか?

ありがとうございます!

+1

更新:[self performSelector:@selector(showInfo :) withObject:nil afterDelay:.1]を[self showInfo:nil]に変更すると、遅いデバイス(またはシミュレータの外)で破損する可能性があります。それは奇妙な範囲の問題のように感じる。どんな助けもありがとう! – Chazbot

+0

あなたが記述したのと同じ問題に陥る。何らかの理由で、モーダルプレゼンテーションをスケジュールしたり、私の場合は次の実行ループで実行するようにスケジュールしたりすると、問題が解消されます。キーボードは最初のレスポンダとして立ち往生しません。ありがとう! – tyler

+0

私も注意する必要があります - この問題はiOS4にのみ影響するようです。この問題はiOS5 +では表示されません。 – tyler

答えて

1

複数の却下オプションを持つ警告がキーボード上で呼び出されると、キーボードはアクティブなテキストフィールドのresignFirstResponderで一度解除できなくなります。

警告を表示する前に、キーボードを閉じる必要があります。

あなたのUITextFieldは、と呼ばれると仮定します。myTextField;

[myTextField resignFirstResponder]; //That's the only line I added 

UIAlertView *emailFailAlert = [[UIAlertView alloc] initWithTitle:@"Error" 
                 message:@"error message text." 
                 delegate:self 
               cancelButtonTitle:@"Not now" 
               otherButtonTitles:@"Settings", nil]; 
[emailFailAlert setTag:2]; 
[emailFailAlert show]; 
[emailFailAlert release]; 

この不思議な奇妙な問題に対処しなければならなかった人にとっては、これが役立つことを願っています。

+0

私はこの1つに希望を失ってしまった!ありがとう! – Chazbot

-1

alertView:didDismissWithButtonIndex:に直接電話するべきではありません。このデリゲートメソッドは、アラートが消えた後のすべてのケースで自動的に実行されます。それ以外の場合、コードは2回実行されます。

+0

ありがとうございますが、私はそれを直接呼び出すわけではありません。ユーザーがUIAlertViewのボタンの1つをタップすると呼び出されます。 – Chazbot

関連する問題