检测UIAlertController何时被另一个UIViewController解雇

时间:2015-02-17 17:19:16

标签: objective-c ios8 uiwindow uialertcontroller uialertaction

从iOS 8和新的UIAlertController开始,在以下情况中:

  • 提供了一个UIAlertController。
  • 本地推送通知横幅显示在顶部,作为UIWindow。
  • 用户点击横幅,然后导航到另一个UIViewController,并且Windows.rootViewController正在关闭UIAlertController ......

有没有办法检测到任何未被任何UIAlertAction按钮激活的解雇?

1 个答案:

答案 0 :(得分:0)

为了避免新的UIViewController解雇您的UIAlertViewController,我的解决方案是: - 使用level = UIWindowALertLEvel +1创建新的UIWindow - 为该UIWindow添加空的rootViewController - 使UIWIndow成为一个keyWindow - 从rootViewController中显示alertController。

因此,这个警报控制器不会被另一个视图控制器解雇。

我的代码:

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)

    }