我在更改应用程序中的 root 时遇到问题。
我的应用程序的设计。登录应用程序后,我想将 root vc 更改UITabBarViewController
为清理堆栈。
我遇到了多个问题。
在应用登录操作 -> 或底部 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
下一个问题是如果我们在TabBarViewController
viewDidLoaded
.
UIApplication.shared.keyWindow?.rootViewController = self
嵌入的标签栏项目本身UINavigationController
没有导航控制器,所以导航 vc 没有实例化?因为无论何时我都会进入项目 vc child -> 我不能再回来了。如果我不改变根 vc,一切都很好。
对于 1) 您不能使用 segue 呈现视图控制器,然后使用它来替换准备中的根视图控制器。您需要从故事板实例化选项卡视图控制器,然后替换根视图控制器。
像这样的东西:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "TabController")
UIApplication.shared.keyWindow?.rootViewController = vc
(假设情节提要名为“Main”,并且您为选项卡控制器提供情节提要 ID 为“TabController”。
我不太清楚 2 的问题是什么。
但是,作为一般说明,我会采用不同的方法,而不是将登录控制器作为初始视图控制器,将标签栏作为初始控制器,然后在应用程序第一次启动时显示登录控制器。这样你就完全避免了更换根控制器,而且它更受控制。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句