UISplitview:从 appDelegate 访问 UITabBarController
UISplitview: access UITabBarController from appDelegate
我需要从 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 为 nil。如果我从情节提要中删除 UINavigation 控制器,则可以通过以下方式轻松访问 UITabBarController:
let tabController = splitViewController.viewControllers.first as! UITabBarController
访问 UITabBarController 的子控制器的正确方法是什么,其中 UISplitView 是根?
与其将标签栏控制器嵌入到导航控制器中,不如将子视图控制器嵌入到它们自己的导航控制器中,如下所示:
Split View -> Tab Bar -> Navigation Controller #1 -> View Controller
-> Navigation Controller #2 -> View Controller
这是结合导航控制器使用标签栏的正确方法。
终于找到解决办法了。我不得不像这样使用导航控制器的 "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)")
现在我可以从 appDelegate 轻松访问任何 viewController 和 运行 它们的方法:-)
我需要从 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 为 nil。如果我从情节提要中删除 UINavigation 控制器,则可以通过以下方式轻松访问 UITabBarController:
let tabController = splitViewController.viewControllers.first as! UITabBarController
访问 UITabBarController 的子控制器的正确方法是什么,其中 UISplitView 是根?
与其将标签栏控制器嵌入到导航控制器中,不如将子视图控制器嵌入到它们自己的导航控制器中,如下所示:
Split View -> Tab Bar -> Navigation Controller #1 -> View Controller
-> Navigation Controller #2 -> View Controller
这是结合导航控制器使用标签栏的正确方法。
终于找到解决办法了。我不得不像这样使用导航控制器的 "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)")
现在我可以从 appDelegate 轻松访问任何 viewController 和 运行 它们的方法:-)