Определить, когда UIAlertController отклоняется другим UIViewController
Начиная с iOS 8 и нового UIAlertController, в сценарии, где:
- Представлен UIAlertController.
- Локальный баннер push-уведомлений отображается сверху как UIWindow.
- Пользователь нажимает на баннер, а затем переходит к другому UIViewController, и UIAlertController отклоняется window.rootViewController...
Есть ли способ обнаружить такое увольнение, которое не активируется ни одной из кнопок UIAlertAction?
1 ответ
Чтобы избежать отклонения вашего UIAlertViewController новым UIViewController, мое решение: - Создать новое UIWindow с level = UIWindowALertLEvel +1 - добавить пустой rootViewController для этого UIWindow - Сделать этот UIWIndow keyWindow - показать alertController из rootViewController.
Таким образом, этот alertcontroller не будет отклонен другим viewcontroller.
Мой код:
func showSimpleAlertOverWindow(title: String, msg: String, okButtonTitle : String, animated : Bool) {
CLWrapper.logDebug("show message <\(msg)>")
let _alertWindow = UIWindow(frame: UIScreen.mainScreen().bounds)
_alertWindow.rootViewController = UIViewController()
_alertWindow.windowLevel = UIWindowLevelAlert + 1
_alertWindow.hidden = false
let alert = UIAlertController(title: title ?? "", message: msg ?? "", preferredStyle: UIAlertControllerStyle.Alert)
let okBtn = UIAlertAction(title: okButtonTitle ?? "", style: UIAlertActionStyle.Default) { (alertAction) -> Void in
_alertWindow.resignKeyWindow()
_alertWindow.hidden = true
}
alert.addAction(okBtn)
_alertWindow.makeKeyWindow()
_alertWindow.rootViewController!.presentViewController(alert, animated: animated, completion: nil)
}