2016-07-25 24 views
1

私は、アプリケーション代理人にタイマーを持っています。ユーザーは、そのタイマーのセレクターをタブバーにない別のviewController ;時間間隔を選択した後、モーダルセグがUITabBarControllerの最初のviewControllerをロードするために使用されます。UITabBarControllerにUIAabertControllerを表示しようとしましたが、ビューがウィンドウ階層に表示されません。

時間間隔が過ぎるとアプリがアラートを表示しますが、これは私に表示させます。警告:UITabBarControllerにUIAlertControllerを表示しようとします。ビューはウィンドウ階層にありません!

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

答えて

4

まず目に見えるビューコントローラを取得しよう:ここ

はI'amが使用してコードがあります。あなたはこのパブリック拡張子でこれを行うことができます。その後、

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 
      } 
     } 
    } 
} 

とは

+0

はあなたに感謝し、このVCに警告コントローラを示し、それは全く問題が – Theilya

+0

働いていない、交尾! – Dmitry

+0

uitabbarcontrollerのuisplitviewcontrollerはどうですか? – SAHM

関連する問題