我的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)
答案 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中显示警报控制器