Ios 更改根视图控制器

Ios 更改根视图控制器,ios,swift,Ios,Swift,我在应用程序中更改根目录时遇到问题 我的应用程序的设计。 登录到应用程序后,我想将根vc更改为UITabBarViewController,以清理堆栈 我面临着多重问题 将vc设置为应用登录操作->上的选项卡栏或在底部vc中: self.performSegue(withIdentifier: "goToMainTabBar", sender: nil) override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

我在应用程序中更改根目录时遇到问题

我的应用程序的设计。 登录到应用程序后,我想将根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
    viewdiload
    中设置根目录

    UIApplication.shared.keyWindow?.rootViewController=self

  • 保存在
    UINavigationController
    中的选项卡栏项本身没有导航控制器,因此导航vc没有实例化?因为当我将进入项目vc儿童->我不能再回来了。 如果我赢了;不要更改根vc,一切正常。

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

    大概是这样的:

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewController(withIdentifier: "TabController")
    UIApplication.shared.keyWindow?.rootViewController = vc
    
    (假设脚本名为“Main”,并且您将脚本ID设置为“TabController”

    我不太清楚2的问题是什么

    但是,作为一般性说明,我将以不同的方式处理此问题,而不是将登录控制器作为初始视图控制器,而是将选项卡栏作为初始控制器,然后在应用程序第一次启动时仅显示登录控制器。这样,您就完全避免了替换根控制器,而且它更受控制。

    F或者1)不能使用segue呈现视图控制器,然后使用它替换prepare中的根视图控制器。您需要从序列图像板实例化选项卡视图控制器,然后替换根视图控制器

    大概是这样的:

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewController(withIdentifier: "TabController")
    UIApplication.shared.keyWindow?.rootViewController = vc
    
    (假设脚本名为“Main”,并且您将脚本ID设置为“TabController”

    我不太清楚2的问题是什么


    但是,作为一般性说明,我将以不同的方式处理此问题,而不是将登录控制器作为初始视图控制器,而是将选项卡栏作为初始控制器,然后在应用程序第一次启动时仅显示登录控制器。这样,您就完全避免了替换根控制器,而且它更受控制。

    poss可能重复:@Ercell0我不这么认为,你读了我的2个问题吗?是的,我读了,也许你应该继续读这个问题,你需要将你的VC嵌入UINavigationController,然后将其添加为根VC:
    。rootViewController=UINavigationController(rootViewController:tabVC)
    可能重复:@Ercell0我不这么认为,你读了我的2个问题了吗?是的,我读了,也许你应该继续读这个问题,你需要将你的VC嵌入UINavigationController中,然后将其添加为根VC:
    。rootViewController=UINavigationController(rootViewController:tabVC)
    谢谢你的解决方案。我会按照你说的去做。谢谢你的解决方案。我会按照你说的去做。