当ViewController上没有句柄时,是否可以显示警报?
我正在创建一个集中功能,用于将错误记录到控制台,数据库中,并且理想情况下,我想为用户弹出一个通知。我宁愿不必在每次记录错误时都传递ViewController。
答案 0 :(得分:1)
您可以通过rootViewController
或当前显示的viewController
来显示它。
自启动应用程序以来,至少有一个UIWindow对象,而大多数
可能至少是该窗口的rootViewController
。
UIApplication.shared.keyWindow!.rootViewController
您可以在此处在代码中的任何位置展示它,只需将方法扩展为UIApplication或UIViewController。
或者,您可以搜索最顶级的视图控制器。同样,您可以在UIApplication
中进行扩展,从此处显示警报:
class func topViewController(rootViewController: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
guard let rootViewController = rootViewController else {
return nil
}
guard let presented = rootViewController.presentedViewController else {
return rootViewController
}
switch presented {
case let navigationController as UINavigationController:
return topViewController(rootViewController: navigationController.viewControllers.last)
case let tabBarController as UITabBarController:
return topViewController(rootViewController: tabBarController.selectedViewController)
default:
return topViewController(rootViewController: presented)
}
}
以警报视图为例:
extension UIApplication {
static func presentAlert(with title: String, message: String) {
guard let rootVc = UIApplication.shared.keyWindow?.rootViewController else {
return
}
let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Okay", style: UIAlertActionStyle.default, handler: nil))
rootVc.present(alert, animated: true, completion: nil)
}
}
}
答案 1 :(得分:1)
您始终可以在窗口上添加视图。搜索有关将视图添加到应用程序窗口的信息。
答案 2 :(得分:0)
创建一个UIView并将其添加为窗口的最前面子视图(该子视图始终可用)。
这可能是从笔尖加载的UIView子类,它具有标签和关闭按钮,依此类推。因此它可以简单而独立。
我实际上在我自己的应用程序中使用了类似的东西进行调试。当我print
进入控制台时,我还在所有内容前都放置了一个临时UILabel,以便查看正在记录的内容。