繁体   English   中英

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

[英]Go back to previous view controller doesn't work

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

@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将从弹出的位置弹出回到先前的视图控制器。 因此,有两种方法可以实现您想要的

1)如果要显示viewController,则必须关闭视图控制器以显示以前的视图控制器

self.dismissViewControllerAnimated(true, completion: nil)

2)如果要使用PopToVewcontroller,则必须推送第二个视图控制器,而不是使用

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

如果要返回到以前的视图控制器,只需添加:

[self dismissViewControllerAnimated:YES completion:nil];

按钮操作方法。

如果将其添加到每个屏幕上显示的导航视图控制器上,我认为没有理由不起作用,因为它将始终关闭最近显示的视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM