解雇模态提出的VC和Popping呈现VC

时间:2018-06-12 22:17:06

标签: ios swift uinavigationcontroller presentmodalviewcontroller

我在viewcontroller中嵌入了navigationcontroller,将另一个viewcontroller推入堆栈。推送viewcontroller的{​​{1}}有一个embedded viewcontroller,用于分段/模态显示最终的viewcontroller

点击一下按钮,我试图解除最终呈现的viewcontroller并弹出当前的viewcontroller并返回初始状态。

到目前为止,我已经能够解雇,但是弹出似乎不适用于解雇的完成处理程序。

我已经尝试打印出层次结构,即self.presentingViewControllerself.navigationControllerself.presentingViewController.presentingViewController ...,所有这些都输出为nil,而且我现在无法回到初始状态状态。

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

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

2 个答案:

答案 0 :(得分:0)

你能试试吗

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

     self.dismiss(animated:true) {

        nav.popToRootViewController(animated:true)
     }
 }

答案 1 :(得分:0)

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

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

@IBAction func unwindToThisViewController(segue: UIStoryboardSegue)
{
}

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

来访问该viewcontroller
self.performSegue(withIdentifier: "unwindToThisViewController", sender: self)

还有一篇题为Working with Unwind Segues Programmatically in Swift的好文章,其内容详尽。