关闭模态呈现的 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.presentingViewController
、self.navigationController
、self.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 之上 - 两者都是可触摸的