关闭模态呈现 VC 和弹出呈现 VC

Dismissing Modally Presented VC and Popping Presenting VC

我有一个 viewcontroller 嵌入在 navigationcontroller 中,它将另一个 viewcontroller 推入堆栈。此推送的 viewcontroller 有一个 embedded viewcontroller,segues/modally 呈现最终的 viewcontroller

单击按钮时,我试图关闭最终呈现的 viewcontroller 并将呈现的 viewcontroller 和 return 弹出到初始状态。

到目前为止,我已经能够让 dismiss 继续进行,但是 popping 似乎在 dismiss 的完成处理程序中不起作用。

我已经尝试打印出层次结构,即 self.presentingViewControllerself.navigationControllerself.presentingViewController.presentingViewController...,所有这些都输出 nil,而且我承认现在卡在了 return进入初始状态。

在查看视图层次结构时,最终呈现的 viewcontroller 位于 UITransitionView 下方,与我之前提到的堆栈的其余部分分开..

任何 thoughts/guidance 将不胜感激。

你能试试吗

if let nav = UIApplication.shared.keyWindow?.rootViewController as? UINavigationController {

     self.dismiss(animated:true) {

        nav.popToRootViewController(animated:true)
     }
 }

既然你提到了 segues,我想 unwind segues 可能会有帮助。我构建了一个快速测试项目,它们确实在您的场景中正常运行。

在相关的 SO 问题中有一个相当出色的答案 What are Unwind segues for and how do you use them?。针对您的特定情况的答案摘要是:将以下功能放在您的初始视图控制器中:

@IBAction func unwindToThisViewController(segue: UIStoryboardSegue)
{
}

然后您可以直接 'unwind' 到 viewcontroller 通过直接使用 Storyboard Segues(如在引用的答案中)或以编程方式通过:

self.performSegue(withIdentifier: "unwindToThisViewController", sender: self)

还有一篇题为 Working with Unwind Segues Programmatically in Swift 的好文章,里面有很多细节。