2017-01-30 2 views
2

Если я позвоню (В UIViewController)Удаляет ли метод отклонения UIAlertController без анимации?

alert.dismiss(animated: false, completion: nil) 
print("executed after dismiss?") 

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

Могу ли я сделать:

alert.dismiss(animated: false, completion: nil) 
let newAlert = UIAlertController(...) 
present(newAlert, animated: true, completion: nil) 

Без того, чтобы беспокоиться о проблеме во время представления newAlert?

+0

Вы попробовали? – rmaddy

+0

Я пробовал, и это работает, но я не сейчас, если это действительно синхронно или удачи. Я не знаю, могу ли я быть уверен, что он всегда будет работать – gsobrevilla

+0

Почему бы вам просто не представить 'newAlert' из обработчика завершения увольнения? Учитывая, что 'reject (...)' принимает обратный вызов как аргумент, он заставляет меня думать, что это асинхронный метод, хотя я не уверен, но чтобы быть в безопасности, вы можете просто представить новое предупреждение из блока завершения. – MikeG

ответ

4

Как и большинство методов анимации, когда вы увольняете UIAlertController, вы просто получаете мяч. Контроллер представления отклоняется и удаляется асинхронно. Чтобы проверить это, мы можем использовать код вроде этого:

let alert = UIAlertController(title: "Oh No!", message: ":(", preferredStyle: UIAlertControllerStyle.alert) 

self.present(alert, animated: true, completion: nil) 
print(presentedViewController) // Optional(<UIAlertController: 0x7fefe901e670>) 

alert.dismiss(animated: true, completion: nil) 
print(presentedViewController) // Optional(<UIAlertController: 0x7fefe901e670>) 

Как было показано выше предупредительного контроллер представления не удаляется, как представленный контроллером вид сразу. Вы можете представить новое предупреждение сразу после отклонения старого предупреждения. Однако наилучшей практикой было бы разместить ваш код для второго предупреждения в обработчике завершения первого. Этот обработчик завершения вызывается после того, как на представленном контроллере представления вызывается viewDidDisappear.

+0

Если я вызываю 'alert.dismiss (анимированный: false, complete: nil)' ситуация такая же? Он остается асинхронно? – gsobrevilla

+1

Да, независимо от того, будет ли он анимирован, он будет выполняться асинхронно. –

+0

Если это ответ на ваш вопрос, пожалуйста, примите ответ. Благодаря! –

Смежные вопросы