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

Posted

技术标签:

【中文标题】当使用 view.window?.rootViewController 根据 if 语句更改视图时,嵌入式控制器不会被激活【英文标题】:When using view.window?.rootViewController to change the view based on an if statement, the embedded controllers are not activated 【发布时间】:2020-04-30 14:52:18 【问题描述】:

所以我有一个具有 2 个结果的 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()

将根视图控制器设置为最右侧的视图时,无法访问标签栏控制器和导航控制器

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

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

【问题讨论】:

【参考方案1】:

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

如果您需要基于 if 语句显示 loginViewController,最好使用以下内容显示它:

navViewController.pushViewController(loginViewController, animated: true)

【讨论】:

哦,好的。当我这样做时,我可以访问导航控制器的功能,但是在“主搜索控制器”上,后退按钮是可见的,当我按下它时,它会返回到相同的视图,没有后退按钮。我只是放了'navViewController.navigationBar.isHidden = true',它现在可以工作了。谢谢 乐于助人,@equ1nox!

以上是关于当使用 view.window?.rootViewController 根据 if 语句更改视图时,嵌入式控制器不会被激活的主要内容,如果未能解决你的问题,请参考以下文章

Spritekit 回到 rootViewController

SplitViewController - 可以更改 rootview 和 detailview 的 z 顺序吗?

swift3:如何将 xib 呈现给 viewcontroller

如何在片段中获取rootview?

iPad:在 RootView 中合并 SplitViewController 和 NavigationController 的概念?

如何在 iOS 中从 webview 返回到 rootview?