如何在显示2个警报之间暂停代码

时间:2016-11-02 20:12:47

标签: ios objective-c alert pause

我有一些iOS代码,我需要能够显示2个背靠背警报。当用户在第一个警报上单击“确定”时,我需要显示第二个警报。因为显示警报不会“暂停”代码,我的第二个警报会尝试显示与我的第一个警报几乎同时显示并且事情中断(第二个警报未显示)。

我需要的是在显示第一个警报时暂停代码的方法。一旦用户在第一个警报上单击“确定”,它就会显示第二个警报。

在转到第二个警报之前等待第一个警报完成的正确方法是什么?

以下是我的完整代码以防万一。每个警报都由一个条件触发。如果两个条件都成立,那么我会按照我所描述的背对背警报问题。

    UIAlertController* alert;
    UIAlertAction* defaultAction;
    CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
    if(status != kCLAuthorizationStatusAuthorizedAlways) {
        alert = [UIAlertController alertControllerWithTitle:@"Warning"
                                                    message:@"Reminder will not work unless you enable 'Always' location."
                                             preferredStyle:UIAlertControllerStyleAlert];

        defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                               handler:^(UIAlertAction * action) {}];


        [alert addAction:defaultAction];
        [self presentViewController:alert animated:YES completion:nil];

    }


    UIUserNotificationSettings *settings = [[UIApplication sharedApplication] currentUserNotificationSettings];
    if(settings.types==0) {
        alert = [UIAlertController alertControllerWithTitle:@"Warning"
                                                    message:@"Reminder will not work unless you enable notifications."
                                             preferredStyle:UIAlertControllerStyleAlert];

        defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                               handler:^(UIAlertAction * action) {}];

        [alert addAction:defaultAction];
        [self presentViewController:alert animated:YES completion:nil];
    }

2 个答案:

答案 0 :(得分:3)

你要做的只是第一个处理程序中的第二个警告:

UIAlertController* alert;
UIAlertAction* defaultAction;
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
if(status != kCLAuthorizationStatusAuthorizedAlways) {
    alert = [UIAlertController alertControllerWithTitle:@"Warning"
                                                message:@"Reminder will not work unless you enable 'Always' location."
                                         preferredStyle:UIAlertControllerStyleAlert];

    defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                           handler:^(UIAlertAction * action) {

        UIUserNotificationSettings *settings = [[UIApplication sharedApplication] currentUserNotificationSettings];

        if(settings.types==0) {

            inner_alert = [UIAlertController alertControllerWithTitle:@"Warning"
                                                message:@"Reminder will not work unless you enable notifications."
                                         preferredStyle:UIAlertControllerStyleAlert];

            inner_defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                           handler:^(UIAlertAction * action) {}];

            [inner_alert addAction:inner_defaultAction];
            [self presentViewController:inner_alert animated:YES completion:nil];
        }
    }];


    [alert addAction:defaultAction];
    [self presentViewController:alert animated:YES completion:nil];

}

当你点击" Ok"然后它将调用第二个警报的代码。

答案 1 :(得分:1)

您可以在@interface中设置变量,并在viewDidLoad

中将其设置为0
*reinterpret_cast<std::vector<long>*>(&vec)

然后创建功能以显示警报并通过开关调用其他警报(self.number),或者您可以再次调用showAlert。

@interface ViewController ()
    @property (nonatomic) int number;
@end

- (void)viewDidLoad {
    [super viewDidLoad];
    self.number = 0;

}