回到上一个视图控制器不起作用

时间:2016-03-05 12:56:28

标签: ios swift2

我的第一个视图控制器有一个按钮,它触发@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)返回上一个控制器。但是当我按下返回按钮时,我可以看到打印信息"返回..."但该应用程序不会返回到第一视图控制器。为什么?

3 个答案:

答案 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方法。

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

答案 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];

按钮操作方法。

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