您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

从iOS 13开始,每个UIAlertController都会在用户响应之前自动消失

从iOS 13开始,每个UIAlertController都会在用户响应之前自动消失

我遇到了完全相同的问题,并通过将警报显示一个强变量中的窗口中进行修复。

例如,您可以在AppDelegate中保留一个用于显示警报的窗口,并在UIAlertController扩展中使用它。

//In app delegate
let alertWindow: UIWindow = {
    let win = UIWindow(frame: UIScreen.main.bounds)
    win.windowLevel = UIWindow.Level.alert + 1
    return win
}()

然后,在您的扩展程序中:

public extension UIAlertController {
    func show() {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let vc = UIViewController()
        vc.view.backgroundColor = .clear
        vc.view.tintColor = Theme.mainAccentColor
        appDelegate.alertWindow.rootViewController = vc
        appDelegate.alertWindow.makeKeyAndVisible()
        vc.present(self, animated: true, completion: nil)
    }
}

您还需要确保在关闭警报时将警报窗口从视图中删除,否则您的应用将变得无响应,因为所有轻按都将由(不可见的)警报窗口处理,这仍然是所有问题的重中之重。为此,我将以下代码添加到警报中所有操作的处理程序中:

(UIApplication.shared.delegate as! AppDelegate).alertWindow.isHidden = true
其他 2022/1/1 18:20:17 有625人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶