2009-03-19 7 views
0

"何かをする - > show alert1->何かをする - > show alert2"というコードを書く。iPhoneのAlertViewのバグ?


    //do something 
    UIAlertView *alert = [[UIAlertView alloc] 
          initWithTitle:@"Alert 1" 
          message:nil 
          delegate:nil 
          cancelButtonTitle:@"OK" 
          otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 
    //do something 
    UIAlertView *alert2 = [[UIAlertView alloc] 
          initWithTitle:@"Alert 2" 
          message:nil 
          delegate:nil 
          cancelButtonTitle:@"OK" 
          otherButtonTitles:nil]; 
    [alert2 show]; 
    [alert2 release]; 

と、突然奇妙な複数のAlertViewsに起こった:それは "警告1" を示す - > "アラート2"(押して 'OK') - > "警告1"。なぜ "Alert 1"が再び表示されるのですか?私はまだデリゲートメソッドを書いていません。

alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndexはうまく機能します。デリゲートメソッドは、複数のalertViewを表示する一般的な方法ですか?

答えて

2

ショーはモーダルではないので、私はアラート1が表示され、アラート2でカバーされていると思います。アラート2がクローズされると、アラート1はまだ開いています。

2番目の質問には、alertView:didDismissWithButtonIndex:がうまくいくかもしれませんが、実際にはテストしていません。

+0

ありがとうございました。 alert1のキャンセルボタンは、alert2が表示されているときにブロックされます。これは私にそれをクリックする時間がない。デリゲートメソッドは常に複数のアラートビューを表示するために使用されますか? –

+0

少なくともそれ以外の方法はありません – cobbal

+0

UIAlertViewをモーダルで表示する方法がありますが、プライベートメソッドです – rpetrich

0

代理人は、アラートが解除されたときに通知を受けることができ、どのボタンを閉じて通知することができるようになっています。アラートがまったく解消されるかどうかには影響しません。

アラートは、ボタンをタップして(必要でない場合は)、アラートインスタンスの[UIAlertView dismissWithClickedButtonIndex:animated]または(文書化されていない)dismissのいずれかのメソッドを呼び出すまで表示されます。

Cobbalのように見えますが、アラート2はアラート1でポップアップし、アラート2は却下され、アラート1はそこに残ります(それが解消されるまで)。

別のメッセージが表示されている間に新しいアラートを表示する特別な理由はありますか?多分もっと多くの文脈が私たちが問題の根本に到達するのを助けるでしょう。私はそれが設計の問題かもしれないと考えています。

[編集]これに戻ってもう一度読んで、デリゲートメソッドで尋ねるのは、そこから警告2を表示する必要があるかどうかです。どちらの場合でも、直接的にも間接的にも、それはおそらくあなたが望むものです。間接的には、アラート2が表示されるべきかどうか(またはそれにつながる状況)を決定するいくつかの状態が別の場所に設定されている可能性があります。最初のアラートを表示すると、その状態(おそらくフラグ)が設定され、(デリゲートメソッドからの)アラートが解除されるとクリアされる可能性があります。

0

この理由は、UIAlertViewが表示されている間にブロックされないためです。アラートビューを表示した後に書かれたコードは、アラートが表示された直後に実行されます。

2つの方法があります。何かをしてから警報を出し、次に別の警報を出して別の警報を発する者。

最初の方法を実行してアラートを表示し、アラートのデリゲートメソッドにフックし、コールバックをalertviewから取得したら、もう一方のメソッドを実行します。

このようにして、プロセスの最初の部分で警告が表示されるまで、プロセスの2番目の部分は実行されません。

関連する問題