Swift:以编程方式嵌入选项卡栏控制器后,导航栏消失

Swift: Navigation Bar disappears after programatically embedding tab bar controller

我刚刚以编程方式将选项卡栏控制器嵌入到我的应用程序中,但是它似乎迫使我的 Storyboard 嵌入式导航栏消失了,我想这是因为我现在将 rootviewController 设置为我的标签栏。

我读了answer to this post,因为问题似乎很相似,但是这样做会提示我错误Pushing a navigation controller is not supported

下面是我在 AppDelegate 中编写的代码,这里我创建了我的选项卡视图和一个导航控制器以推送到根视图控制器:

    // 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

我该如何解决这个问题?

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

所以,如果你的两个导航控制器场景有 "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