我需要从appDelegate访问UITabBarController及其第二个子视图。
这是我在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是根?
答案 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
这是将标签栏与导航控制器结合使用的正确方法。