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

Posted

技术标签:

【中文标题】检测 UIAlertController 何时被另一个 UIViewController 解除【英文标题】:Detect when UIAlertController is being dismissed by another UIViewController 【发布时间】:2015-02-17 17:19:16 【问题描述】:

ios 8 和新的 UIAlertController 开始,在以下场景中:

显示了一个 UIAlertController。 本地推送通知横幅显示在顶部,作为 UIWindow。 用户点击横幅然后导航到不同的 UIViewController 并且 UIAlertController 正在被 window.rootViewController 关闭...

有没有办法检测任何 UIAlertAction 按钮都没有激活的这种解雇?

【问题讨论】:

【参考方案1】:

为了避免你的 UIAlertViewController 被新的 UIViewController 解散,我的解决方案是: - 创建新的 UIWindow 级别 = UIWindowALertLEvel +1 - 为那个 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)

    

【讨论】:

以上是关于检测 UIAlertController 何时被另一个 UIViewController 解除的主要内容,如果未能解决你的问题,请参考以下文章

java中 线程、注解、反射这几块知识在实战中用得到么?在何时会用到?

有没有办法知道何时呈现 UIViewController 失败?

使用 File.Create() 后被另一个进程使用的文件

如何检测 SD 卡何时插入?

检测 WKWebView 何时完成加载

如何检测何时单击文件输入的取消?