回到以前的视图控制器不起作用

我的第一个视图控制器有一个button,它触发了@IBAction goTo2ndVc() ,它提供了第二个ViewController:

 class FirstVC: UIViewController { ... @IBAction func goTo2ndVc() { let secondVc = SecondVC(label: "I am second vc.") self.presentViewController(secondVc, animated: true, completion: nil) } 

当按下button时,第二个视图控制器显示在屏幕上。 没问题。

在第二视图控制器中,还有一个用于返回第一视图控制器的button:

 class SecondVC: UIViewController { ... @IBAction func backToFirst(sender: AnyObject) { print("go back ...") self.navigationController?.popViewControllerAnimated(true) } } 

我在网上看了一下,有人build议使用navigationController?.popViewControllerAnimated(true)回到前一个控制器。 但是当我按回去button,我可以看到打印信息“回去…”,但应用程序不会回到第一个视图控制器。 为什么?

 @IBAction func backToFirst(sender: AnyObject) { print("go back ...") self.dismissViewControllerAnimated(true, completion: nil) } 

在Swift 3

 self.dismiss(animated: true, completion: nil) 

您不应该使用导航控制器,因为您在添加第二个视图控制器时没有使用导航控制器。 这就是为什么简单地调用dismissViewControllerAnimated方法。

只有在通过pushViewController方法添加视图控制器时,才必须使用UINavigationController及其pop方法。

熟悉导航控制器的概念: https : //developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/NavigationControllers.html

那里

这个问题很简单..

 self.presentViewController(secondVc, animated: true, completion: nil) 

代码将呈现第二个视图,你不推动它。

 self.navigationController?.popViewControllerAnimated(true) 

popViewController将从popup的位置回弹到前一个视图控制器。 所以,有两种方法可以达到你想要的

1)如果你想呈现viewController,那么你必须closures视图控制器以显示以前的视图控制器

 self.dismissViewControllerAnimated(true, completion: nil) 

2)如果你想使用PopToVewcontroller,那么你必须推你的第二个视图控制器,而不是显示它

 self.navigatioVonroller?.pushViewController(secondVc, animated: true) 

如果你想返回到前一个视图控制器,你可以简单地添加:

 [self dismissViewControllerAnimated:YES completion:nil]; 

到button的操作方法。

如果添加到每个屏幕上的导航视图控制器上,我都没有理由不这样做,因为它总是会忽略最近出现的视图。