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

问题描述:

我在我的应用程序委托中有一个计时器,用户选择在另一个不在标签栏中的viewController中执行该计时器的选择器所需的时间间隔;选择时间间隔后一个模式SEGUE用于加载第一的viewController中的UITabBarController时的时间间隔经过我希望应用程序呈现警报尝试在其视图不在窗口层次结构中的UITabBarController上呈现UIAlertController

,但它给了我这样的:警告:试图提出UIAlertController上的UITabBarController,其视图不在窗口层次结构中!

这里是我'使用的代码:

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

第一次尝试获得可见视图控制器。您可以使用此公延做到这一点:

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

+0

谢谢你,它一直 – Theilya

+0

没问题,伙计! – Dmitry

+0

uitabbarcontroller中的uisplitviewcontroller怎么样? – SAHM