繁体   English   中英

问题过渡到根视图控制器

[英]Problem transitioning to root view controller

我有一个故事板设置,如下所示:

家用导航控制器-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

工作正常。 但这会创建多个视图控制器实例(已选中“调试内存图”)。 假设我在Home VC1和Settings 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的内容。

关于如何使它工作的任何建议?

谢谢。

您应该声明这两者中的第一个是可见的,因此,如果我们假设首页是向用户显示的第一个,按设置,您应该像这样显示它

@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)
}

每次您提供一个视图控制器时,它都会显示在当前显示的视图控制器上方,并且会覆盖它,但是不会删除和释放第一个视图控制器。

您应该只展示一个导航控制器,我认为应该是SettingViewController

@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)
}

暂无
暂无

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

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