如何在swift ios中解雇2个视图控制器?

时间:2015-01-14 13:03:16

标签: ios swift uiviewcontroller dismissviewcontroller

如何在Swift iOS中关闭2个视图控制器?

以下是我的代码。

@IBAction func backButtonTapped(sender: AnyObject) {
    self.presentingViewController
        .presentingViewController
        .dismissViewControllerAnimated(true, completion: nil)
}

4 个答案:

答案 0 :(得分:12)

为此目的有特殊的展开segue ,它旨在回滚到堆栈中的某个视图控制器。

让我们将最顶层的控制器(你来自哪里)作为 source 和堆栈中的控制器(你想回滚到顶部)作为目的地

  1. 目标中创建IBAction以在展开时触发:

    @IBAction func myUnwindAction(segue: UIStoryboardSegue) {}

  2. 它可以是空的。

      source 控制器中的
    1. 通过从控制器图标拖动到退出一个来创建展开segue,它将找到您在步骤1中创建的操作。调用segue unwind

    2. 现在您可以使用常规

      从代码中发出segue

      performSegueWithIdentifier("unwind", sender: nil)

    3. 我描述了如何从代码中发出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堆栈中的UIViewControllers
extension 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)
        }
    }
}