从 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 中:viewDidAppearviewWillAppear 将不会被调用,因为我将VC3Over 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的主要内容,如果未能解决你的问题,请参考以下文章

如何从其他面板从 JTextField 获取输入

从PRISM开始学WPFMVVMViewModel?

在 python 中,为啥从数组读取比从列表读取慢?

从图库中挑选或从相机捕获的高质量图像

从PRISM开始学WPFMVVMCommand?

从PRISM开始学WPFPrism?