Ios 转换到根视图控制器时出现问题

Ios 转换到根视图控制器时出现问题,ios,swift,Ios,Swift,我的故事板设置如下: 家庭导航控制器-VC1-VC2-VC3-VC4 设置导航控制器-VC1-VC2-VC3 要在主屏幕和设置屏幕之间切换,我在设置VC1中有一个主图标/按钮;以及Home VC1中的设置图标/按钮。但我无法正确地完成此转换 首先,我尝试了这个代码 @IBAction func homeButtonTapped(button: UIButton) { var navController: AppStoryboard.Main.instance.instantiateVie

我的故事板设置如下:

家庭导航控制器-VC1-VC2-VC3-VC4

设置导航控制器-VC1-VC2-VC3

要在主屏幕和设置屏幕之间切换,我在设置VC1中有一个主图标/按钮;以及Home VC1中的设置图标/按钮。但我无法正确地完成此转换

首先,我尝试了这个代码

@IBAction func homeButtonTapped(button: UIButton) {
    var navController: AppStoryboard.Main.instance.instantiateViewController(withIdentifier: "HomeNavController") as? UINavigationController

    currentViewController?.present(navController!, animated: true, completion: nil)
}

//... similar code for settingsButtonTapped
它很好用。但这会创建多个视图控制器实例(选中调试内存图)。假设我在主VC1和设置VC1之间来回5次,我会看到每个视图控制器的5个实例

然后我试了这个

@IBAction func homeButtonTapped(button: UIButton) {
    var navController: AppStoryboard.Main.instance.instantiateViewController(withIdentifier: "HomeNavController") as? UINavigationController

    window?.rootViewController = navController!
}

//... similar code for settingsButtonTapped
这修复了多个实例的问题。但是它弄乱了我的自定义动画弹出窗口。如果我从未单击“主页”或“设置”按钮,则弹出窗口可以正常工作。但是,如果我单击按钮一次,从那以后弹出窗口将无法正确显示。假设我从VC1转到VC2,然后在VC2中打开一个弹出窗口。弹出窗口出现了,但背景并不像通常那样变灰,我可以清楚地看到VC2的内容,在这之后我也可以看到VC1的内容

有没有关于如何让它工作的建议


谢谢。

您应该首先声明这两个选项中的哪一个是可见的,因此如果我们假设Home是第一个显示给用户的选项,请按“设置”,您应该这样显示它

@IBAction func settingsButtonTapped(button: UIButton) {
    let navController = // Instantiate your settings controller
    present(navController!, animated: true, completion: nil)
}
然后,如果要返回主视图控制器,应按如下方式关闭“设置”视图控制器:

@IBAction func homeButtonTapped(button: UIButton) {
    presentingViewController?.dismiss(animated: true, completion: nil)
}

每次显示视图控制器时,它都会显示在当前显示的视图控制器上方,并覆盖它,但第一个视图控制器不会被删除和解除分配。

您应该只显示一个导航控制器,我认为它应该是
设置视图控制器

@IBAction func SettingButtonTapped(button: UIButton) {
    var navController: AppStoryboard.Main.instance.instantiateViewController(withIdentifier: "SettingNavController") as? UINavigationController

    currentViewController?.present(navController!, animated: true, completion: nil)
}
但是在
homeButtonTapped
中,您应该关闭控制器

@IBAction func homeButtonTapped(button: UIButton) {
   self.navigationController?.dismiss(animated: true, completion: nil)
}