幽灵视图控制器

Posted

技术标签:

【中文标题】幽灵视图控制器【英文标题】:Ghost viewcontrollers 【发布时间】:2018-04-27 10:37:16 【问题描述】:

在我的 ios 应用中,当从 viewcontroller 2 转换到 1 时,使用:

let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "Start") as! Start
view?.window?.rootViewController?.dismiss(animated: true, completion:nil)
view?.window?.rootViewController?.present(newViewController, animated: false, completion: nil)

过渡效果很好,但是之后当我单击视图控制器 1 中的一个按钮时,它会引导我进入视图控制器 3(这是一个 SKScene)它也可以,但是当我使用上面的代码从 3 返回到视图控制器 1 时,它显示(旧版本)viewcontroller 2,然后我必须单击返回按钮才能转到 viewcontroller 1。

我尝试在每次转换离开时将 viewcontroller 2 关闭。

所有视图控制器都在同一个导航控制器中,但没有顶栏

如何在不出现重影的情况下返回到以前的视图控制器?

【问题讨论】:

不确定我是否正确理解了这个问题,但您可以在您的 navigationController 上使用setViewControllers(_:animated:) 一次性将它管理的所有控制器替换为另一个层次结构... 你是什么意思@Alladinian 另外,exit segue(或 popToRoot,如果您只想转到第一个控制器)将帮助您从 3 放松到 1 省略控制器 2... 如何声明/使用 popToRoot? 你没有声明它。 It's a method of UINavigationController 【参考方案1】:

尝试从导航数组中删除您的视图控制器。

var arrViews = self.navigationController?.viewControllers

    for viewController in arrViews! 

        if viewController is YourViewControllerToRemove

            if let index = arrViews?.index(of: viewController) 
                arrViews?.remove(at: index)
            
        
    

self.navigationController?.viewControllers = arrViews!

【讨论】:

以上是关于幽灵视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

Linux Glibc幽灵漏洞紧急修补方案

蓝桥杯省赛真题26Scratch吃豆人 少儿编程scratch蓝桥杯省赛真题讲解

ConstraintLayout 中的 Gone 元素会留下幽灵空间

将视图控制器推入模态视图控制器视图

如何从子视图控制器访问父视图控制器的视图?

拆分视图控制器:如何将主视图控制器连接到详细视图控制器?