2017-03-01 3 views

答えて

1

、IN swift3:

func getVisibleViewController(_ rootViewController: UIViewController?) -> UIViewController? { 

    var rootVC = rootViewController 
    if rootVC == nil { 
     rootVC = UIApplication.shared.keyWindow?.rootViewController 
    } 

    if rootVC?.presentedViewController == nil { 
     return rootVC 
    } 

    if let presented = rootVC?.presentedViewController { 
     if presented.isKind(of: UINavigationController.self) { 
      let navigationController = presented as! UINavigationController 
      return navigationController.viewControllers.last! 
     } 

     if presented.isKind(of: UITabBarController.self) { 
      let tabBarController = presented as! UITabBarController 
      return tabBarController.selectedViewController! 
     } 

     return getVisibleViewController(presented) 
    } 
    return nil 
} 
-1

INORDERは、子ビューコントローラを追加した場合、階層内の一番上のビューコントローラへの参照は、次のコード

UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController; 

while (topController.presentedViewController) 
{ 
    topController = topController.presentedViewController; 
} 

return topController; 
0

を試す取得する:これはUIViewControllersの配列を返す

let viewControllersVisible = self.rootViewController?.childViewControllers.filter({ $0.isVisible && $0.view.window }) 

をビュー階層に追加された場合、ユーザーが実際にそのView Controllerを見ることができるかどうかは、階層に依存します。

let viewControllerVisible = self.rootViewController?.presentedViewController 
0

あなたはこのanswerをチェックアウトする必要があります:あなたはモーダルだけのビューコントローラを提示した場合

。その要点は、ウィンドウの.rootViewControllerで始まることです。 .rootViewControllerとしてUINavigationControllerを使用して(私自身のコードでは、私は()AppDelegateでこれを使用します。

if let nvc = self.window?.rootViewController as? UINavigationController { 
    if let mvc = nvc.topViewController as? MasterViewController { 
     // ... do something 
    } else if let dvc = nvc.topViewController as? DetailViewController { 
     // ... do something 
    } 
} 

(注)マスター・ディテール・アプリケーションのデフォルトのテンプレートを使用している場合、あなたはSplitViewControllerを検討する必要があることこれは、自分自身を介在が、それは定型的なコードから合理的に明らかにする必要があります。

-1

あなたは、ウィンドウ上の最上位のビューはこれにしようとしたい場合は、ビューを取得します。

[[[[UIApplication sharedApplication] keyWindow] subviews] lastObject]; 
関連する問題