更改根视图控制器

耶皮

我在更改应用程序中的 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没有导航控制器,所以导航 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章