Swift:编程式embedded标签栏控制器后,导航栏消失

我刚刚编程式embedded一个标签栏控制器到我的应用程序,但它似乎已经强制我的故事板embedded式导航栏消失,我认为这是因为我现在已经设置rootviewController为我的标签栏。

我读这个post的答案,因为它似乎是类似的问题,但这样做会提示我的错误Pushing a navigation controller is not supported

下面是我的代码写在AppDelegate,在这里我创build我的标签视图和导航控制器推到根视图控制器:

  // Set up the tab and navigation bar controllers var currController = window?.rootViewController let chatSB = UIStoryboard(name: "Chat", bundle: nil) let mainSB = UIStoryboard(name: "Main", bundle: nil) let tabBarController = UITabBarController() var navigationController = UINavigationController(rootViewController: currController!) let profileVC = mainSB.instantiateViewControllerWithIdentifier("profileVC") as TimelineTableViewController let chatVC = chatSB.instantiateViewControllerWithIdentifier("chatInboxVC") as ChatInboxViewController tabBarController.viewControllers = [profileVC, chatVC, navigationController] window?.rootViewController = tabBarController 

我将如何去解决这个问题?

如果您所需的视图控制器embedded在UINavigationController实例中,则需要直接实例化这些视图控制器而不是所需的视图控制器。 故事板将负责实例化embedded的视图控制器。

所以,如果你的两个导航控制器场景有“profileNavController”和“chatInboxNavController”作为它们的标识符,你的代码将是 –

 // Set up the tab and navigation bar controllers var currController = window?.rootViewController let chatSB = UIStoryboard(name: "Chat", bundle: nil) let mainSB = UIStoryboard(name: "Main", bundle: nil) let tabBarController = UITabBarController() var navigationController = UINavigationController(rootViewController: currController!) let profileNavController = mainSB.instantiateViewControllerWithIdentifier("profileNavController") as UINavigationController let chatNavController = chatSB.instantiateViewControllerWithIdentifier("chatInboxNavController") as UINavigationController tabBarController.viewControllers = [profileNavController, chatNavController, navigationController] window?.rootViewController = tabBarController