iOS如何以编程方式简单地返回到先前呈现/推送的视图控制器?

Mat*_*der 13 ios swift

如何以编程方式返回上一个视图控制器?我找到了这个答案,但有一个例子说明如果我们有导航堆栈怎么回去:

navigationController?.popViewControllerAnimated(true)
Run Code Online (Sandbox Code Playgroud)

如果我的控制器队列基于导航控制器,那就没关系.但是通常我们使用故事板,我们指定标有关键字的segue 显示意味着我们不关心导航推送或提出新视图控制器.所以在这种情况下我假设只有通过segue的unwind视图控制器的选项,但也许有一些简单的调用,我可以编程方式返回到我以前的视图控制器,而不检查我的视图控制器堆栈是否包含UINavigationController.

我正在寻找简单的东西self.performSegueToReturnBack.

Pra*_*tha 41

您可以通过扩展轻松扩展任何内置类或任何其他类的功能.这是swift中扩展的完美用例.

您可以像这样扩展UIViewController并在任何UIViewController中使用performSegueToReturnBack函数

Swift 2.0

extension UIViewController {
    func performSegueToReturnBack()  {
        if let nav = self.navigationController {
            nav.popViewControllerAnimated(true)
        } else {
            self.dismissViewControllerAnimated(true, completion: nil)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Swift 3.0

extension UIViewController {
    func performSegueToReturnBack()  {
        if let nav = self.navigationController {
            nav.popViewController(animated: true)
        } else {
            self.dismiss(animated: true, completion: nil)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:

_ = nav.popViewControllerAnimated(true)如果我们使用它而不分配任何东西,有人建议我们应该分配给一个未命名的变量,因为编译器会抱怨.但我没有发现它.