从 UINavigationVController 导航以模态方式呈现到根 UINavigationVController - swift
Posted
技术标签:
【中文标题】从 UINavigationVController 导航以模态方式呈现到根 UINavigationVController - swift【英文标题】:navigating from UINavigationVController presented Modally to the root UINavigationVController - swift 【发布时间】:2017-06-20 11:00:16 【问题描述】:如图所示,我有根导航控制器,其根视图控制器为 VC1。
在 VC2 中,我向 Modally 提供选项:Over Current Context 以获得模糊效果。
在 VC4 中,用户可以选择导航回根 viewcontorller VC1。如大红色箭头所示。
我尝试了两种方法:
第一:
在 VC4 中:
func popToRoot()
self.dismiss()
self.navigationController?.popToRootViewController(animated: animated)
问题:这段代码导航回VC2。
第二:
我尝试了一个public static boolean
,如果用户想返回VC1
,我将其设置为true
VC1:
class VC1: UIViewController
public static var shouldGoBackToMainRoot = false;
override func viewDidAppear(_ animated: Bool)
VC1.shouldGoBackToMainRoot = false
VC2:
class VC2: UIViewController
override func viewDidAppear(_ animated: Bool)
if VC1.shouldGoBackToMainRoot
self.dismiss()
self.navigationController?.popToRootViewController(animated: animated)
return
VC4:
class VC4: UIViewController
// .. other code ...
func onGoBackToRootClicked()
VC1.shouldGoBackToMainRoot = true
self.dismiss()
self.navigationController?.popToRootViewController(animated: animated)
问题:在VC2
中:viewDidAppear
和viewWillAppear
将不会被调用,因为我将VC3
与Over Current Context
一起呈现。
注意: 移除当前上下文将使VC2
的 viewDidAppear 函数被调用,但我会失去模糊效果。这不是我想要的。
问题:如何在不丢失模糊效果的情况下从 VC4 导航到 VC1?
【问题讨论】:
检查这个以获得 unWind segue ***.com/questions/12561735/… 【参考方案1】:不要在 VC2 上显示 VC3,而是在 self.window.rootViewController
中的 AppDelegate
中显示它 overCurrentContext
并在AppDelegate
中强烈引用您的firstNavigationController
所以在你的 VC4 中,当你想回到 VC1 时,你所要做的就是......
let delegate = UIApplication.shared.delegate as? AppDelegate
delegate.rootNavigationController.popToRootViewController(animated: true)
这是从 VC4 下方的 bottomNavigationStack 中删除 viewController,不会从顶部删除 VC4。
【讨论】:
【参考方案2】:写一个从 VC4 到 VC2 的委托。在 VC2 中,关闭呈现的导航控制器。关闭操作完成后,使用 popToRootViewController 导航回 VC1。
【讨论】:
以上是关于从 UINavigationVController 导航以模态方式呈现到根 UINavigationVController - swift的主要内容,如果未能解决你的问题,请参考以下文章