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

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


person SAHM    schedule 06.03.2015    source источник
comment
Разумно ли представить его из appDelegate, создав новое окно? Я слышал, что это может вызвать проблемы с вращением.   -  person SAHM    schedule 06.03.2015


Ответы (1)


Вы можете обработать это в блоке завершения метода rejectViewControllerAnimated вашего класса модального контроллера. Представьте 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];
}
person Mahi    schedule 06.03.2015