0

「何かをする->アラート1を表示する->何かをする->アラート2を表示する」というコードを書きます。


    //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];

そして突然、複数の AlertView に奇妙なことが起こりました: "Alert 1" -> "Alert 2" ('OK' を押す) -> "Alert 1" と表示されます。「アラート 1」が再度表示されるのはなぜですか? デリゲート メソッドはまだ作成していません。もしかしてバグ?

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

4

3 に答える 3

2

show はモーダルではないため、アラート 1 が表示されてからアラート 2 でカバーされると思います。アラート 2 が閉じられても、アラート 1 はまだ開いています。

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

于 2009-03-19T12:17:39.737 に答える
0

デリゲートは、アラートが閉じられたときに通知され、どのボタンがそれを閉じるために使用されたかを通知できるようにするためのものです。アラートが無視されるかどうかにはまったく影響しません。

アラートは、ボタンをタップするか (存在する場合は必須ではありません)、またはアラート インスタンス[UIAlertView dismissWithClickedButtonIndex:animated]の (文書化されていない)メソッドを呼び出すことによって、無視されるまで表示されたままになります。dismiss

(Cobbal が示唆したように) アラート 2 がアラート 1 の上にポップアップし、アラート 2 を無視すると、アラート 1 は (それ自体が閉じられるまで) そこに残ります。

別のアラートがまだ表示されている間に新しいアラートを表示したい特定の理由はありますか? おそらく、もう少しコンテキストがあれば、問題の根本にたどり着くのに役立つでしょう。これは、設計上の問題であると思われます。

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

于 2009-03-19T12:57:52.697 に答える
0

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

必要なのは、2 つの異なる方法です。1 つは何かを実行してアラートを表示し、もう 1 つは何かを実行して別のアラートを表示します。

何かを実行してアラートを表示する最初のメソッドを開始してから、アラートのデリゲート メソッドにフックし、アラートビューからコールバックを取得したら、他のメソッドを実行します。

このようにして、ユーザーがプロセスの最初の部分でアラートの [OK] を押すまで、プロセスの 2 番目の部分は発生しません。

于 2009-03-19T18:58:18.737 に答える