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

vij*_*iju 9 uiviewcontroller ios swift dismissviewcontroller

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

以下是我的代码.

@IBAction func backButtonTapped(sender: AnyObject) {
    self.presentingViewController
        .presentingViewController
        .dismissViewControllerAnimated(true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)

Mix*_*xaz 11

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

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

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

    @IBAction func myUnwindAction(segue: UIStoryboardSegue) {}

它可以是空的.

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

  2. 现在你可以用常规的代码发出segue

    performSegueWithIdentifier("unwind", sender: nil)

我描述了如何从代码中发出unwind segue.对于按钮展开,可以通过拖动按钮直接在IB中创建segue以退出图标.

另请查看此讨论以获取更多信息:如何以编程方式执行Unwind segue?

  • 这里的教程也可能有所帮助:https://medium.com/@mimicatcodes/create-unwind-segues-in-swift-3-8793f7d23c6f (2认同)

Gan*_*ddy 11

Swift 3+版本.您可以使用以下代码在Swift 3中一次关闭两个视图控制器.

func dismissTwoViews() {
    self.presentingViewController?
        .presentingViewController?.dismiss(animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)

  • 嗯,这段代码与问题中发布的内容完全相同.那有什么区别呢?在Swift2中它只解除了一个控制器,而在Swift3中它关闭了两个控制器? (3认同)

Ste*_*rca 2

您一次只能关闭一个视图控制器。尝试这个

@IBAction func backButtonTapped(sender: AnyObject) {
        self.presentingViewController?.dismissViewControllerAnimated(true, completion: {
            let secondPresentingVC = self.presentingViewController?.presentingViewController;
            secondPresentingVC?.dismissViewControllerAnimated(true, completion: {});
        });
}
Run Code Online (Sandbox Code Playgroud)