如何以编程方式返回上一个视图控制器?我发现了这个answer,但有一个例子说明如果我们有导航堆栈怎么回去:
navigationController?.popViewControllerAnimated(true)
如果我的控制器队列基于导航控制器,那就没问题了。但通常我们使用故事板,我们指定标有关键字 Show 的segue,这意味着我们不关心导航推送或呈现新的视图控制器。所以在这种情况下,我假设只有通过segue的unwind视图控制器的选项,但也许有一些简单的调用,我可以通过编程方式返回到我以前的视图控制器,而不检查我的视图控制器堆栈是否包含{{1}或不。
我正在寻找像UINavigationController
这样简单的东西。
答案 0 :(得分:37)
您可以通过扩展轻松扩展任何内置类或任何其他类的功能。这是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)
}
}
}
Swift 3.0
extension UIViewController {
func performSegueToReturnBack() {
if let nav = self.navigationController {
nav.popViewController(animated: true)
} else {
self.dismiss(animated: true, completion: nil)
}
}
}
注意:
有人建议我们应该将_ = nav.popViewControllerAnimated(true)
分配给一个未命名的变量,因为如果我们使用它而不分配任何内容,编译器就会抱怨。但我没有发现它。
答案 1 :(得分:4)
最佳答案是这样的: _ = navigationController?.popViewController(animated:true)