首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Swift中的独立警报?

Swift中的独立警报?
EN

Stack Overflow用户
提问于 2019-06-05 08:19:14
回答 3查看 84关注 0票数 -1

当我可能没有ViewController上的句柄时,有没有办法显示警报?

我正在创建一个集中的函数,用于将错误记录到控制台和数据库中,理想情况下,我希望弹出一个通知给用户。我不希望每次记录错误时都要传递一个ViewController。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-05 11:24:45

您可以从您的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
EN

Stack Overflow用户

发布于 2019-06-05 11:41:26

您始终可以在窗口上添加视图。关于添加视图到应用程序窗口的搜索。

票数 1
EN

Stack Overflow用户

发布于 2019-06-05 10:18:51

创建一个UIView并将其添加为窗口的最前面的子视图(始终可用)。

这可以是一个从nib加载的UIView子类,它有一个标签和一个取消按钮,等等。因此,它可以简单且自包含。

实际上,我在自己的应用程序中使用类似的东西来进行调试。当我通过print连接到控制台时,我还在所有内容前面放置了一个临时的UILabel,这样我就可以看到我正在记录的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56452837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档