当前位置: 首页 > 面试题库 >

尝试呈现ViewController,其视图不在Windows层次结构中

舒宏富
2023-03-14
问题内容

我遇到一个奇怪的问题:我制作了2个视图控制器,可以用代码切换视图:

var currentViewController:UIViewController=UIApplication.shared.keyWindow!.rootViewController!

func showController()
{
    let ViewControllernew1 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "viewController2")

    currentViewController.present(ViewControllernew1, animated: true, completion: nil)

}

我的应用程序正确地向第一个视图控制器打开,然后,当我单击在Sprite
Kit场景上创建的按钮时,我可以成功地将视图切换到新的视图控制器(我成功显示了第二个场景),但是,我可以切换后不再更改我的视图控制器。如果再次单击该按钮,则会收到以下消息:

尝试在Test_Vuforia.GameViewController上显示:0x12f549610,其视图不在窗口层次结构中!

你知道是什么问题吗?我知道我处于根位置,因此切换后无法再更改其视图控制器,但是如何更改呢?

谢谢 !

编辑:

我的代码在SKScene内部使用,而不是从UIVewController使用,使用后缀self时出现此错误。:类型为View(SKScene)的值没有成员’present’。

我正在用Vuforia创建增强现实游戏,我需要使用SKScene切换AR视图。


问题答案:

问题

当前的viewController不是rootViewControllerfrom
UIApplication。因此,您应该找到当前可见的viewController,然后从那里显示它。

只需在上找到topViewController UIApplication Stack,然后从那里显示您的控制器。

let newViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "viewController2")
UIApplication.topViewController()?.present(newViewController, animated: true, completion: nil)

的扩展名可UIApplication为您提供方便

extension UIApplication {
    class func topViewController(base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
        if let nav = base as? UINavigationController {
            return topViewController(base: nav.visibleViewController)
        }
        if let tab = base as? UITabBarController {
            if let selected = tab.selectedViewController {
                return topViewController(base: selected)
            }
        }
        if let presented = base?.presentedViewController {
            return topViewController(base: presented)
        }
        return base
    }
}

参考:Gist



 类似资料:
  • 问题内容: 我的问题是与HTML和CSS有关。我有一个要显示在列表中的层次结构类型结构。层次结构包含国家,州和城市(深度为三个层次)。 我想在选择列表中显示该列表,每个项目类型(国家,州,城市)必须是可选的。这些项目应缩进为: 问题在于缩进。我正在尝试使用margin-left或padding- left缩进标签,这些标签在FireFox中显示正确,但在IE7中却不正确。这是生成的选择列表的示例:

  • 问题内容: 此函数失败,并显示运行时错误: 有人遇到过吗? UPD: 在模拟器iOS 8.1 / 8.4上失败。9.3工作正常。 UPD2: 创建如下: 问题答案: 通过在项目中放置以下修复程序,我使视图调试器再次工作: 当您的项目加载时,该方法将执行,如果当前尚未实现,则会导致并使用该实现,因此,视图调试使iOS8拥有了所寻找的行为。 要将其添加到您自己的项目中,请在您的项目中创建一个新的空Ob

  • 我在我的应用程序中使用MVVM模式。我有以下(简化版)VM类: 因此,一个Module2601_VM包含几个属性,以及Module2610_VM和ComPort_VM对象的列表。 我有一个MainModule_VM类中Module2601_VM对象的列表。 我想将这个Module2601集合及其子项绑定到树状视图中,并使用以下层次结构: 网关: 网关#0 COM#1 我的问题是,我的层次结构正常,

  • 问题内容: 我正在尝试呈现数据模型中 是否 有任何保存的数据。但我收到以下错误: 警告:尝试在其视图不在窗口层次结构中显示 相关代码: 我尝试过使用Google找到的其他解决方案,但均未成功。 问题答案: 此时,在代码中,视图控制器的视图仅已创建,尚未添加到任何视图层次结构中。如果您想尽快从该视图控制器中进行显示,则应确保最安全。

  • 我试图重现在Protege中显示给我的OWL本体(OWL.ttl)的类层次结构,您可以在标准URI位置http://www.w3.org/2002/07/OWL#下载。 我遇到的问题是,当我调用以获取层次结构根类时,返回的结果为零。因此我没有根类可以向下递归并构建层次结构。 ==============================================================

  • 我有一个绑定到MVVM可观察集合的TreeView。我的项目模板由图像和文本块组成,如以下代码所示: 当然,发生这种情况是因为堆栈面板现在位于选择区域上方。 有什么解决办法吗?