UISplitview:从appDelegate访问UITabBarController

Tom*_*lbu 5 uitabbar appdelegate swift

我需要访问UITabBarController,以及来自appDelegate的第二个子视图.

以UISPlitViewCOntroller为根的故事板

这是我在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)")
Run Code Online (Sandbox Code Playgroud)

该应用程序崩溃,抱怨tabController是零.如果我从storyboard中删除UINavigation控制器,则可以使用以下命令轻松访问UITabBarController:

let tabController = splitViewController.viewControllers.first as! UITabBarController
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*lbu 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)")
Run Code Online (Sandbox Code Playgroud)

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