使用 view.window?.rootViewController 根据 if 语句更改视图时,嵌入式控制器未激活

When using view.window?.rootViewController to change the view based on an if statement, the embedded controllers are not activated

所以我有一个 if 语句,它有两个结果,rootViewController 变成 loginViewControllermainSearchViewControllermainSearchViewController 的故事板有一个嵌入的 TabViewController 和一个 NavigationViewController。但是,通过设置根视图控制器,我无法访问 TabViewControllerNavigationViewController 并且只有 mainSearchViewController 处于活动状态。这是我的代码:

 func setRootViewController() {
    if Auth.auth().currentUser != nil {
        let mainSearchViewController = storyboard?.instantiateViewController(withIdentifier: Constants.Storyboard.mainSearchViewController)

        view.window?.rootViewController = mainSearchViewController
        view.window?.makeKeyAndVisible()


    } else {

        let loginSearchViewController = storyboard?.instantiateViewController(withIdentifier: Constants.Storyboard.loginViewController) 

        view.window?.rootViewController = loginSearchViewController
        view.window?.makeKeyAndVisible()

将根视图控制器设置为最右边的视图时,失去对 Tab Bar Controller 和 Nav Controller 的访问权限

编辑:我尝试将 rootViewController 设置为选项卡控制器,这允许我使用选项卡功能,但我仍然无法访问导航控制器。导航控制器也是如此,当它是根视图控制器但没有选项卡控制器功能时它可以工作

编辑 2:在 mainSearchViewControllernavigationController?.isNavigationBarHidden = false` 的 viewDidLoad() 中,我将根视图控制器作为选项卡栏控制器。我可以访问选项卡图标,也可以看到导航栏,但是点击单元格时导航功能不起作用。

更改 rootViewController 可能会导致您的问题,因为 tabViewController 可能没有将 loginViewController 作为选项卡。

如果您需要根据 if 语句显示 loginViewController,最好使用类似以下内容的方式来显示它:

navViewController.pushViewController(loginViewController, animated: true)