2017-05-29 11 views
0

私のビューコントローラ階層の一番上のナビゲーションコントローラを見つける必要があります。 |>ナビゲーションコントローラとそのトップビューコントローラに同時に提示されたビューコントローラがありますか?

のUIViewController A - 私は、ナビゲーションコントローラであれば確実に把握できなかった、それは、トップビューコントローラが同じでView Controllerを提示していることができますすなわち

NavigationController --Presentedです

|

NavigationController.topViewController --Presented - >のUIViewController B

が、これは同時に可能ですか?私は最後まで両方のパスをトラバースし、どちらが長いかを比較してから正しいパスを選択する必要がありますか?私はナビゲーションコントローラとそのトップビューコントローラに同時に存在するView Controllerをしようとしましたが、私はそのビューウィンドウ階層にないLLDB でこの警告「に提示する試みを取得

を試してみました何

! "

ビューコントローラ(0x100605860)が表示されませんでしたが、これはいつもそうでしょうか?カスタムプレゼンテーションでウィンドウ階層にビューを残すことはできますか?

答えて

0

presentViewControllerは、ビューコントローラを示しています。ビューコントローラは返されません。 UINavigationControllerを使用していない場合は、おそらくpresentedViewControllerを探しているので、ルートから開始し、表示されたビューを繰り返してください。あなたは、私が見つけるために、この戦略を使用して、コントローラ

if let topController = UIApplication.topViewController() { 
} 
+0

にこのどこかを使用することができます

スウィフト3. *

extension UIApplication { class func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? { if let navigationController = controller as? UINavigationController { return topViewController(controller: navigationController.visibleViewController) } if let tabController = controller as? UITabBarController { if let selected = tabController.selectedViewController { return topViewController(controller: selected) } } if let presented = controller?.presentedViewController { return topViewController(controller: presented) } return controller } } 

スウィフト2

extension UIApplication { class func topViewController(controller: UIViewController? = UIApplication.sharedApplication().keyWindow?.rootViewController) -> UIViewController? { if let navigationController = controller as? UINavigationController { return topViewController(navigationController.visibleViewController) } if let tabController = controller as? UITabBarController { if let selected = tabController.selectedViewController { return topViewController(selected) } } if let presented = controller?.presentedViewController { return topViewController(presented) } return controller } } 

topViewController。 UIViewControllerまたはUITabBarControllerではなく、一番上のUINavigationControllerを見つける必要があります。これはUINavigationControllerクラスに固有です。私の質問は、このコードは、UINavigationController上の階層のどこかに表示されているビューコントローラがある場合でも機能しますか? –

+0

この場合、これは失敗する可能性があります - let present = controller?presentViewController { return topViewController(controller:present) } –

+0

@AamirAnwarこれをチェックしてくださいhttps://stackoverflow.com/questions/33395463/in-uinavigationcontroller-what-トップレベルのコントローラ間の違いは –

関連する問題