2

如何在显示 UIAlertView 后停止代码执行,直到用户按下 OK 按钮?如果这是一个问题,有什么解决方法?

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 上的标记设置来执行此操作。

如果您有三个警报,请在类的顶部在 @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
}; 

然后,在您的 [alert show] 之前,将要显示的警报标签设置为。

myAlert.tag = UserConfirmationAlert;

然后在您的 UIAlertDelegate 中,您可以在 switch/case 中执行所需的方法,如下所示:

// 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 回答