尝试在UITabBarController上呈现UIAlertController,其视图不在窗口层次结构中

时间:2016-07-25 20:46:22

标签: ios swift uiviewcontroller uitabbarcontroller uialertview

我的app委托中有一个计时器,用户在另一个不在标签栏中的viewController中选择执行该计时器选择器所需的时间间隔;选择时间间隔后,模态segue用于加载UITabBarController中的第一个viewController

当时间间隔过去我希望应用程序提供警报,但它给了我:警告:尝试在UITabBarController上呈现UIAlertController,其视图不在窗口层次结构中!

这是我正在使用的代码:

let alert = UIAlertController(title: "alert", message: "test", preferredStyle: .Alert)
self.window?.rootViewController?.presentViewController(alert, animated: true, completion: nil)

1 个答案:

答案 0 :(得分:4)

首先尝试获取可见的视图控制器。您可以使用此公共扩展程序执行此操作:

 public extension UIWindow {
    public var visibleViewController: UIViewController? {
        return UIWindow.getVisibleViewControllerFrom(self.rootViewController)
    }

    public static func getVisibleViewControllerFrom(vc: UIViewController?) -> UIViewController? {
        if let nc = vc as? UINavigationController {
            return UIWindow.getVisibleViewControllerFrom(nc.visibleViewController)
        } else if let tc = vc as? UITabBarController {
            return UIWindow.getVisibleViewControllerFrom(tc.selectedViewController)
        } else {
            if let pvc = vc?.presentedViewController {
                return UIWindow.getVisibleViewControllerFrom(pvc)
            } else {
                return vc
            }
        }
    }
}

然后在此vc中显示警报控制器