有没有办法分配NavigationController的rootViewController?

时间:2018-02-25 04:18:16

标签: ios swift uinavigationcontroller

当有人在使用应用程序的中途时,有没有办法更改根控制器?我现在设置它的方式是,如果新用户使用该应用程序,他们将进入具有嵌入式导航控制器的登录页面。当用户填写信息时,他们会进入下一页进行确认。嵌入式导航将返回并更改任何信息。一旦他们确认他们进入主页面。现在的问题是,当用户返回并遵循一些逻辑时,应用程序会转到已有导航控制器的不同视图。当新用户进入该部分时,如何分配返回的用户导航控制器?当用户在空白视图上按下时,他们将返回确认页面。 enter image description here

如何让确认页面视图将导航控制器放在顶部而不是底部?我不知道在哪里更改根导航控制器,但我认为它应该在确认视图控制器的prepareForSegue

if segue.identifier == "showMemoryTable" {
             let memoryListVC = segue.destination as? ReturningUserCityDetailTableViewController
            memoryListVC?.userData = userData
            if userData?.newUser == true {
                let newRootViewController = ReturningUserCityTableViewController()
                self.navigationController?.viewControllers.first = newRootViewController
                let mainStoryBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
                let viewController: UIViewController = mainStoryBoard.instantiateViewController(withIdentifier: "homeVC") 
                navigationController?.setViewControllers([viewController], animated: true)

            }

我不确定是否应该使用setViewControllers,但我相信

1 个答案:

答案 0 :(得分:0)

如果您的目标是更改根视图控制器,您应该通过执行segue来执行此操作,这样做更合适:

let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newRootViewController = mainStoryboard.instantiateViewController(withIdentifier: "ReturningUserCityTableViewController") as! ReturningUserCityTableViewController()
let ad = UIApplication.shared.delegate as! AppDelegate
ad.window?.rootViewController = newRootViewController

请注意,它会更改整个应用程序根视图控制器;您可以将所需的导航控制器设置为应用程序的根目录(显然您可以通过其故事板ID获取它们)。