关闭模态呈现 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.presentingViewController
、self.navigationController
、self.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 的好文章,里面有很多细节。
我有一个 viewcontroller
嵌入在 navigationcontroller
中,它将另一个 viewcontroller
推入堆栈。此推送的 viewcontroller
有一个 embedded viewcontroller
,segues/modally 呈现最终的 viewcontroller
。
单击按钮时,我试图关闭最终呈现的 viewcontroller
并将呈现的 viewcontroller
和 return 弹出到初始状态。
到目前为止,我已经能够让 dismiss 继续进行,但是 popping 似乎在 dismiss 的完成处理程序中不起作用。
我已经尝试打印出层次结构,即 self.presentingViewController
、self.navigationController
、self.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 的好文章,里面有很多细节。