我的第一个视图控制器有一个按钮,它触发@IBAction goTo2ndVc()
,它提供了第二个ViewController:
class FirstVC: UIViewController {
...
@IBAction func goTo2ndVc() {
let secondVc = SecondVC(label: "I am second vc.")
self.presentViewController(secondVc, animated: true, completion: nil)
}
按下按钮时,屏幕上会显示第二个视图控制器。没问题。
在第二视图控制器中,还有一个用于返回第一个视图控制器的按钮:
class SecondVC: UIViewController {
...
@IBAction func backToFirst(sender: AnyObject) {
print("go back ...")
self.navigationController?.popViewControllerAnimated(true)
}
}
我在互联网上查看,人们建议使用navigationController?.popViewControllerAnimated(true)
返回上一个控制器。但是当我按下返回按钮时,我可以看到打印信息"返回..."但该应用程序不会返回到第一视图控制器。为什么?
答案 0 :(得分:3)
@IBAction func backToFirst(sender: AnyObject) {
print("go back ...")
self.dismissViewControllerAnimated(true, completion: nil)
}
在Swift 3中
self.dismiss(animated: true, completion: nil)
您不应该使用导航控制器,因为在添加第二个视图控制器时没有使用它。这就是为什么只需调用dismissViewControllerAnimated
方法。
只有在通过UINavigationController
方法添加视图控制器时,才必须使用pop
及其pushViewController
方法。
答案 1 :(得分:1)
有
问题很简单..
self.presentViewController(secondVc, animated: true, completion: nil)
代码将显示第二个视图,你没有推动它。
self.navigationController?.popViewControllerAnimated(true)
popViewController将弹出回到上一个视图控制器的位置。 所以,有两种方法可以达到你想要的效果
1)如果要呈现viewController,则必须关闭视图控制器以显示以前的视图控制器
self.dismissViewControllerAnimated(true, completion: nil)
2)如果你想使用PopToVewcontroller,那么你必须推送第二个视图控制器,而不是用
来呈现它self.navigatioVonroller?.pushViewController(secondVc, animated: true)
答案 2 :(得分:0)
如果要返回上一个视图控制器,只需添加:
即可[self dismissViewControllerAnimated:YES completion:nil];
按钮操作方法。
如果在每个屏幕上的导航视图控制器上添加了这个,我认为没有理由不这样做,因为它总是会忽略最近显示的视图。