从模态呈现的控制器中呈现 UIAlertController,该控制器将被关闭

Presenting a UIAlertController from a modally presented controller that is being dismissed

在 iOS8 之前,可以在 UIViewController 被关闭的同时从模态呈现的 UIViewController 显示 UIAlertView。我发现当用户需要提醒他们按下模态呈现的控制器上的 'Save' 按钮时发生的某些变化时,这特别有用。自 iOS 8 起,如果 UIAlertController 在被关闭时从模态呈现的视图控制器中显示,则 UIAlertController 也会被关闭。 UIAlertController 在用户可以阅读或自己关闭之前被关闭。我知道我可以让模态呈现的控制器的委托在控制器被关闭后显示警报视图,但是这种情况会产生大量额外的工作,因为这个控制器在很多地方都使用,并且 UIAlertController 必须在某些条件下呈现,在每种情况下都需要将参数传递回控制器委托。有什么方法可以在关闭控制器的同时从模态呈现的控制器(或至少从控制器内的代码)显示 UIAlertController,并让 UIAlertController 一直保持到它被关闭?

您可以在模态控制器类的 dismissViewControllerAnimated 方法的完成块中处理此问题。在应该在任何 class.

中处理的 rootviewcontroller 上呈现 UIAlertController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.navigationItem.rightBarButtonItem setAction:@selector(dismissView)];
[self.navigationItem.rightBarButtonItem setTarget:self];
}
- (void)dismissView {
[self dismissViewControllerAnimated:YES completion:^{
    [self showAlert];
}];
}

- (void)showAlert {
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Alert" message:@"This is Alert" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *okButton = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
    [alertController dismissViewControllerAnimated:YES completion:nil];
}];
UIAlertAction *cancelButton = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
    [alertController dismissViewControllerAnimated:YES completion:nil];
}];
[alertController addAction:okButton];
[alertController addAction:cancelButton];
UIViewController *rootViewController=[UIApplication sharedApplication].delegate.window.rootViewController;
[rootViewController presentViewController:alertController animated:YES completion:nil];
}