iPhone上のAlertViewのバグ?
-
20-08-2019 - |
質問
私は "> alert2を表示> alert1-> DO something-をsomething-表示しない" ためのコードの一部を記述します。
//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"。なぜ「警告1」が再び表示さ?私はまだデリゲートメソッドを書いていません。多分バグ?(alert2が表示されたら、cobbalのおかげで、ALERT1がまだそこにある。)
I見つける - (無効)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndexがうまく動作します。デリゲートメソッドは、複数のalertViewsを表示する一般的な方法ですか?
解決
私は警告1が示され、その後ショーはモーダルではないので、警告2で覆われていることを推測します。警報2が閉じているとき、警告1がまだ開いてます。
あなたの2番目の質問に、alertView:didDismissWithButtonIndex:
良い仕事かもしれないが、私は実際にそれをテストしていません。
他のヒント
デリゲートです。それは警告がすべてで却下されているかどうかには影響しません。
それはあなたがボタンをタップ(もしあれば - 彼らは必要ありません)のいずれかによって却下されるまで、アラートが表示されたままになりますか、どちらかを呼び出し[UIAlertView dismissWithClickedButtonIndex:animated]
または(文書化されていない)dismiss
警告インスタンスのメソッド。 P>
これは2アラート1の上にポップアップされ、アラート、アラート2を閉じ、(Cobbalが示唆したように)のように見える、と(それ自体が却下されるまで)1警報が依然として残っています。
他がまだ表示されている間、あなたが新しいアラートを表示したい特定の理由はありますか?おそらく、いくつかのより多くの文脈では、私が設計上の問題かもしれ疑いがある問題の根に得るために私達に役立つだろう。
[編集]これに戻って来て、もう一度読んで何をデリゲートメソッドで約求めていることは、あなたがそこからの警告2を示すべきであるかどうかである場合、私は疑問に思いますか?直接的または間接的かどうか - その場合、あなたは何をしたい、おそらく年代に。間接的にすることで私はあなたには、いくつかの状態が警告2を表示するかどうかを判断する(またはそれにつながる状況)が別の場所に設定されている可能性があることを意味します。その状態アラートが(デリゲートメソッドから)却下されたとき(フラグは、おそらく)あなたが最初の警告を表示するときに設定し、クリアすることができます。
この問題が発生した理由があります。アラートが表示された後alertviewを示した後に書かれた任意のコードがストレートに実行されます。
あなたが持つべきは、2つの異なる方法です。何かをして、アラートを示し、その後、何かをすると、別のアラートを示している別の一つます。
何かをすると、アラートを表示して、警告のデリゲートメソッドをフックするための第一の方法をキックオフし、あなたがalertviewからのコールバックを取得する際に、他の方法を実行します。
ユーザーは、プロセスの最初の部分でアラートにOKを押すまで、この方法では、プロセスの第二部では発生しません。