UISplitview:从appDelegate访问UITabBarController

时间:2016-02-21 13:35:58

标签: swift uitabbar appdelegate

我需要从appDelegate访问UITabBarController及其第二个子视图。

Storyboard with UISPlitViewCOntroller as root

这是我在applicationDidEnterBackground中尝试过的:

let splitViewController = self.window!.rootViewController as! UISplitViewController
let leftNavController = splitViewController.viewControllers.first as! UINavigationController
let tabController = leftNavController.tabBarController! as UITabBarController
let controllers : Array = tabController.viewControllers!
print("viewcontrollers \(controllers)")

应用程序崩溃,抱怨tabController为零。如果我从storyboard中删除UINavigation控制器,则可以通过以下方式轻松访问UITabBarController:

let tabController = splitViewController.viewControllers.first as! UITabBarController

访问UITabBarController的子控制器的正确方法是什么,其中UISplitView是根?

2 个答案:

答案 0 :(得分:4)

最后我找到了解决方案。我必须使用导航控制器的“childViewControllers”,如下所示:

let splitViewController = self.window!.rootViewController as! UISplitViewController
let leftNavController = splitViewController.viewControllers.first as! UINavigationController
let tabController  = leftNavController.childViewControllers.first as! UITabBarController
let viewControllers : Array = tabController.viewControllers!
print("viewControllers \(viewControllers)")

现在我可以轻松访问任何viewControllers并从appDelegate运行他们的方法: - )

答案 1 :(得分:1)

您应该将子视图控制器嵌入到他们自己的导航控制器中,而不是将标签栏控制器嵌入导航控制器中,如下所示:

Split View -> Tab Bar -> Navigation Controller #1 -> View Controller
                      -> Navigation Controller #2 -> View Controller

这是将标签栏与导航控制器结合使用的正确方法。