如何在Swift iOS中关闭2个视图控制器?
以下是我的代码。
@IBAction func backButtonTapped(sender: AnyObject) {
self.presentingViewController
.presentingViewController
.dismissViewControllerAnimated(true, completion: nil)
}
答案 0 :(得分:12)
为此目的有特殊的展开segue ,它旨在回滚到堆栈中的某个视图控制器。
让我们将最顶层的控制器(你来自哪里)作为 source 和堆栈中的控制器(你想回滚到顶部)作为目的地
在目标中创建IBAction
以在展开时触发:
@IBAction func myUnwindAction(segue: UIStoryboardSegue) {}
它可以是空的。
通过从控制器图标拖动到退出一个来创建展开segue,它将找到您在步骤1中创建的操作。调用segue unwind
现在您可以使用常规
从代码中发出segue performSegueWithIdentifier("unwind", sender: nil)
我描述了如何从代码中发出unwind segue。对于按钮展开,可以通过拖动按钮直接在IB中创建segue以退出图标。
另请查看此讨论以获取更多信息:How to perform Unwind segue programmatically?
答案 1 :(得分:9)
Swift 3+版本。您可以使用以下代码在Swift 3中一次关闭两个视图控制器。
func dismissTwoViews() {
self.presentingViewController?
.presentingViewController?.dismiss(animated: true, completion: nil)
}
答案 2 :(得分:1)
您一次只能关闭一个视图控制器。试试这个
@IBAction func backButtonTapped(sender: AnyObject) {
self.presentingViewController?.dismissViewControllerAnimated(true, completion: {
let secondPresentingVC = self.presentingViewController?.presentingViewController;
secondPresentingVC?.dismissViewControllerAnimated(true, completion: {});
});
}
答案 3 :(得分:0)
快捷键4:
为UIViewController创建了一个扩展,可以根据提供的次数
弹出NavigationController堆栈中的UIViewControllersextension UIViewController {
func pop(numberOfTimes: Int) {
guard let navigationController = navigationController else {
return
}
let viewControllers = navigationController.viewControllers
let index = numberOfTimes + 1
if viewControllers.count >= index {
navigationController.popToViewController(viewControllers[viewControllers.count - index], animated: true)
}
}
}