繁体   English   中英

更改根视图控制器

[英]Change root View Controller

我在应用程序中更改root时遇到问题。

在此处输入图片说明

我的应用程序的设计。 登录应用程序后,我想将root vc更改为UITabBarViewController来清理堆栈。

我遇到了多个问题。

  1. 将vc设置为应用登录操作->或底部vc中的选项卡栏:

     self.performSegue(withIdentifier: "goToMainTabBar", sender: nil) override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let vc = segue.destination as? TabBarViewController { UIApplication.shared.keyWindow?.rootViewController = vc } } 

该应用程序将崩溃:

Application tried to present modal view controller on itself. Presenting controller is TabBarViewController
  1. 下一个问题是,如果我们在TabBarViewController viewDidLoaded设置一个根。

    UIApplication.shared.keyWindow?.rootViewController = self

嵌入在UINavigationController选项卡栏项自身没有导航控制器,因此不会实例化Nav vc吗? 因为我将进入项目vc child->我再也不能支持了。 如果我不更改根vc,那一切都很好。

对于1),您不能使用segue呈现视图控制器,然后使用它来替换prepare中的根视图控制器。 您将需要从情节提要中实例化选项卡视图控制器,然后替换根视图控制器。

像这样:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "TabController")
UIApplication.shared.keyWindow?.rootViewController = vc

(假设情节提要被称为“主要”,并且您为标签页控制器提供了情节提要ID“ TabController”。

对于2的问题,我不太清楚。

但是,作为一般性注释,我将采取不同的方法,而不是使用登录控制器作为您的初始视图控制器,而使用标签栏作为初始控制器,然后在应用程序首次启动时仅显示登录控制器。 这样一来,您就可以避免完全替换根控制器,并且可以更好地控制根控制器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM