Swift中的独立警报?

时间:2019-06-05 00:19:14

标签: ios swift

当ViewController上没有句柄时,是否可以显示警报?

我正在创建一个集中功能,用于将错误记录到控制台,数据库中,并且理想情况下,我想为用户弹出一个通知。我宁愿不必在每次记录错误时都传递ViewController。

3 个答案:

答案 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,以便查看正在记录的内容。