后退按钮将我带到错误的View Controller

时间:2019-06-08 22:35:12

标签: swift segue

我正在使用一个情节提要,其设置如下:

登录屏幕->标签栏控制器->导航控制器->屏幕1到屏幕2到屏幕3。

我第一次登录时,一切正常。屏幕1设置为屏幕2,屏幕2设置为屏幕3,然后您可以使用“后退”按钮返回屏幕2,然后再选择屏幕1。但是,我有一个“注销”功能(下面的代码,尽管我没有认为这与我的问题有关),并且在我“注销”后,将我带到登录屏幕(上述顺序中的第一个屏幕)。当我再次登录时,导航到屏幕2或屏幕3,从segue中按返回按钮,将我带回到登录屏幕,而不是以前的屏幕1或屏幕2。

@objc func logOut(){
    let homeView = self.storyboard?.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController
    self.navigationController?.pushViewController(homeView, animated: true)
    homeView.navigationItem.hidesBackButton = true
}

2 个答案:

答案 0 :(得分:1)

我不确定再次实例化LoginViewController是否是最佳实践,因为您已经将其存储在导航堆栈中。我建议做这样的事情:

@objc func logOut(){
    self.navigationController?.popToRootViewControllerAnimated(true)
}

这将从导航堆栈中删除所有视图控制器,并为您提供根视图控制器(LoginViewController

答案 1 :(得分:0)

已为有好奇心的人更新。问题是pushViewController选项。如果我仅使用“现在”,则不再有此问题。这是我更新的注销代码:

@objc func logOut(){
    let homeView = self.storyboard?.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController
    self.navigationController?.present(homeView, animated: true)
    homeView.navigationItem.hidesBackButton = true

}