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

Posted

技术标签:

【中文标题】关闭模态呈现的 VC 和弹出呈现的 VC【英文标题】:Dismissing Modally Presented VC and Popping Presenting VC 【发布时间】:2018-06-12 22:17:05 【问题描述】:

我有一个 viewcontroller 嵌入在一个 navigationcontroller 中,它将另一个 viewcontroller 推入堆栈。这个推送的viewcontroller 有一个embedded viewcontroller,它连续/模态地呈现一个最终的viewcontroller

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

到目前为止,我已经能够进行解雇,但弹出似乎在解雇的完成处理程序中不起作用。

我已经尝试打印出层次结构,即self.presentingViewControllerself.navigationControllerself.presentingViewController.presentingViewController...,所有这些都输出 nil,并且现在我承认我在返回初始状态时遇到了困难。

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

任何想法/指导将不胜感激。

【问题讨论】:

【参考方案1】:

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

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

@IBAction func unwindToThisViewController(segue: UIStoryboardSegue)


然后,您可以直接使用 Storyboard Segues(如引用的答案)或通过以下方式以编程方式直接“展开”到该视图控制器:

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

还有一篇名为Working with Unwind Segues Programmatically in Swift 的好文章,其中包含很多细节。

【讨论】:

【参考方案2】:

你可以试试

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

     self.dismiss(animated:true) 

        nav.popToRootViewController(animated:true)
     
 

【讨论】:

以上是关于关闭模态呈现的 VC 和弹出呈现的 VC的主要内容,如果未能解决你的问题,请参考以下文章

UIDocumentMenuViewController 关闭呈现视图控制器

以模态方式将 VC 呈现在其他 VC 之上 - 两者都是可触摸的

关闭一次后如何呈现相同的modalView

关闭模态呈现的 ViewController 总是让我回到根目录

关闭呈现的 VC 时呈现视图控制器会丢失子视图

iOS - 在关闭其他视图控制器后立即呈现视图控制器