2

ユーザーが [OK] ボタンを押すまで UIAlertView を表示した後、コードの実行を停止するにはどうすればよいですか? それが問題である場合、回避策は何ですか?

4

2 に答える 2

7

これを使用して終了しました:

...

[alert show];

while ((!alert.hidden) && (alert.superview != nil))
    {
        [[NSRunLoop currentRunLoop] limitDateForMode:NSDefaultRunLoopMode];

    }
于 2012-08-27T13:22:31.423 に答える
1

[alertview show] メソッドの直後に記述されているコードを実行したくないようです。これを実装するには、これらのコード行をメソッドに追加し、UIAlertView の次のデリゲートでそのメソッドを呼び出します。

 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
    {
        if(buttonIndex == OKButtonIndex)
       {
         // Issue a call to a method you have created that encapsulates the 
         // code you want to execute upon a successful tap.
         // [self thingsToDoUponAlertConfirmation];
       }

    }

クラス内に複数の UIAlertView を持つ場合は、各 UIAlertView を簡単に処理できるようにする必要があります。これは、NSEnum と UIAlertView のタグ設定で行うことができます。

3 つのアラートがある場合、クラスの先頭で @interface の前に NSEnum を次のように宣言します。

 // alert codes for alertViewDelegate // AZ 09222014
 typedef NS_ENUM(NSInteger, AlertTypes)
{
    UserConfirmationAlert = 1, // these are all the names of each alert
    BadURLAlert,
    InvalidChoiceAlert
}; 

次に、[アラート表示] の直前に、表示されるアラートのタグを設定します。

myAlert.tag = UserConfirmationAlert;

次に、UIAlertDelegate で、次のようにスイッチ/ケース内で目的のメソッドを実行できます。

// Alert handling code
#pragma mark - UIAlertViewDelegate - What to do when a dialog is dismissed.
// We are only handling one button alerts here.  Add a check for the buttonIndex == 1
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    switch (alertView.tag) {
        case UserConfirmationAlert:
            [self UserConfirmationAlertSuccessPart2];
            alertView.tag = 0;
            break;

        case BadURLAlert:
            [self BadURLAlertAlertSuccessPart2];
            alertView.tag = 0;
            break;

        case InvalidChoiceAlert:
            [self InvalidChoiceAlertAlertSuccessPart2];
            alertView.tag = 0;
            break;

        default:
            NSLog(@"No tag identifier set for the alert which was trapped.");
            break;
    }
}
于 2012-08-26T15:12:58.260 に答える