1

내 응용 프로그램 대리인에 타이머가 있습니다. 사용자가 탭 표시 줄에없는 다른 viewController에서 해당 타이머의 선택기를 실행하는 데 필요한 시간 간격을 선택합니다. ; 시간 간격을 선택하면 UITabBarController에서 첫 번째 viewController를로드하는 데 모달 경계선이 사용됩니다.UITabBarController UITabBarController에 대한보기가 창 계층에없는보기에있는 UITabBarController에 시도하십시오.

시간 간격이 지나면 앱에서 경고를 표시하지만 다음과 같이 표시합니다. 경고 : 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

관련 문제