Swift UISplitview:从appDelegate访问UITabBarController
我需要从appDelegate访问UITabBarController及其第二个子视图 这是我在ApplicationIdentinterBackground中尝试的:Swift UISplitview:从appDelegate访问UITabBarController,swift,uitabbar,appdelegate,Swift,Uitabbar,Appdelegate,我需要从appDelegate访问UITabBarController及其第二个子视图 这是我在ApplicationIdentinterBackground中尝试的: let splitViewController = self.window!.rootViewController as! UISplitViewController let leftNavController = splitViewController.viewControllers.first as! UINavigati
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为零。如果我从情节提要中删除UINavigation控制器,则可以通过以下方式轻松访问UITabBarController:
let tabController = splitViewController.viewControllers.first as! UITabBarController
如果UISplitView是根,访问UITabBarController的子视图控制器的正确方法是什么?与其将选项卡栏控制器嵌入导航控制器中,不如将子视图控制器嵌入它们自己的导航控制器中,如下所示:
Split View -> Tab Bar -> Navigation Controller #1 -> View Controller
-> Navigation Controller #2 -> View Controller
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)")
这是将选项卡栏与导航控制器结合使用的正确方法。最后我找到了一个解决方案。我必须像这样使用导航控制器的“ChildViewController”:
Split View -> Tab Bar -> Navigation Controller #1 -> View Controller
-> Navigation Controller #2 -> View Controller
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)")
现在,我可以轻松访问任何ViewController,并从appDelegate:-)运行它们的方法。为什么有一个导航控制器后跟一个选项卡栏控制器?你能解释一下你希望你的应用程序的导航是什么样的吗?对不起,我没有显示整个故事板。连接到tabbarcontroller的视图是TableView,它与detailViewController(splitview detailViewController)之间存在连接。如果我删除UINavigationController,DetailView将不再具有带有不同按钮和后退按钮的导航栏。这似乎无法解决问题。好的,我可以访问子视图,但是DetailView现在将不显示“backbutton”。而且,它们看起来是模态的(从底部向上),甚至我将TableView嵌入到NavigationController中。