Представление UIAlertController от модально представленного контроллера, который отклоняется


До iOS 8 UIAlertView можно было отображать из модально представленного UIViewController в то же время, когда UIViewController был отклонен. Я обнаружил, что это особенно полезно, когда пользователь должен быть предупрежден о некоторых изменениях, которые произошли, когда он нажал кнопку "Сохранить" на модально представленном контроллере. Начиная с iOS 8, в случае, когда UIAlertController отображается из модально представленного контроллера представления, в то время как он отклоняется, UIAlertController является тоже уволен. UIAlertController будет уволен до того, как пользователь сможет прочитать его или уволить его сам. Я знаю, что у меня может быть делегат для модально представленного контроллера, отображающий представление предупреждения, когда контроллер отклонен, но этот случай создает массу дополнительной работы, так как этот контроллер используется во многих местах, и UIAlertController должен быть представлен с определенными условиями, требующими, чтобы параметры были переданы обратно делегату контроллера в каждом случае. Есть ли способ, чтобы отобразить UIAlertController от модально представленного контроллера (или, по крайней мере, от кода внутри контроллера) в то же самое время, когда контроллер отклоняется, и должен ли UIAlertController оставаться до тех пор, пока он не будет отклонен?

1 5

1 ответ:

Вы можете обработать это в блоке завершения метода dismissViewControllerAnimated вашего модального контроллера clas. Представьте UIAlertController на rootviewcontroller, который должен обрабатываться в любом классе.

- (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];
}