使用 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
变成 loginViewController
或 mainSearchViewController
。 mainSearchViewController
的故事板有一个嵌入的 TabViewController
和一个 NavigationViewController
。但是,通过设置根视图控制器,我无法访问 TabViewController
和 NavigationViewController
并且只有 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:在 mainSearchViewController
navigationController?.isNavigationBarHidden = false` 的 viewDidLoad()
中,我将根视图控制器作为选项卡栏控制器。我可以访问选项卡图标,也可以看到导航栏,但是点击单元格时导航功能不起作用。
更改 rootViewController 可能会导致您的问题,因为 tabViewController 可能没有将 loginViewController 作为选项卡。
如果您需要根据 if 语句显示 loginViewController,最好使用类似以下内容的方式来显示它:
navViewController.pushViewController(loginViewController, animated: true
)
所以我有一个 if 语句,它有两个结果,rootViewController
变成 loginViewController
或 mainSearchViewController
。 mainSearchViewController
的故事板有一个嵌入的 TabViewController
和一个 NavigationViewController
。但是,通过设置根视图控制器,我无法访问 TabViewController
和 NavigationViewController
并且只有 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:在 mainSearchViewController
navigationController?.isNavigationBarHidden = false` 的 viewDidLoad()
中,我将根视图控制器作为选项卡栏控制器。我可以访问选项卡图标,也可以看到导航栏,但是点击单元格时导航功能不起作用。
更改 rootViewController 可能会导致您的问题,因为 tabViewController 可能没有将 loginViewController 作为选项卡。
如果您需要根据 if 语句显示 loginViewController,最好使用类似以下内容的方式来显示它:
navViewController.pushViewController(loginViewController, animated: true
)