Чтобы избежать этого ваш UIAlertViewController освобождается от нового UIViewController, мое решение: - Создать новый UIWindow с уровнем = UIWindowALertLEvel +1 - добавить пустую RootViewController для этого UIWindow - Убедитесь, что UIWindow keyWindow - показать alertController из rootViewController.
Итак, этот диспетчер предупреждений не будет отклонен другим диспетчером представлений.
Мой код:
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)
}