swift - TVOS 需要按下 2 次菜单按钮才能从根 Controller 退出到仪表板

标签 swift tvos

我负责更新现有的 TVOS 项目。我遇到了一些障碍。

如果我在根 Controller 上(即:在应用程序启动时显示的 Controller 。)

按下“菜单”按钮会将我带到一个空白的灰色/白色屏幕。第二次按下菜单返回仪表板。

我曾尝试使用层次结构查看器来查看灰/白屏幕到底是什么,但没有帮助。灰色/白色屏幕由带有 UILayoutContainerView 的 UIWindow 组成,其中包含一个 UINavigationTransitionView。我找不到关于它的其他可识别特征来帮助我确定到底发生了什么。

当应用程序启动时加载一个 UINavigationController,它呈现一个 UIViewController。 Nav Controller 和呈现的 ViewController 都不会覆盖 pressesBegin、pressesEnd 或分配任何 gestureRecongnizers 来拦截或以其他方式覆盖菜单按钮功能。

据我所知,该应用程序应该表现出默认的菜单按钮按下行为,即导航回根目录,然后在根目录退出一次仪表板。也就是说,菜单按钮确实会按原样向后导航。它只是不会在根目录下终止一次应用程序。当它确实进入灰色/白色屏幕时,没有任何功能:applicationWill ... 直到第二次按下 Remote 上的菜单按钮后才会执行。该应用程序也将恢复到此灰色/白色屏幕。

My question is thus, what is going on here. Baring that how can I debug this behavior more effectively.

我已尝试对这个解释进行透彻。我认识到没有代码事情会变得很困难。事情是,我不知道什么代码是相关的,所以将发布任何可能有用的特定代码的指导或请求。

谢谢。

最佳答案

让我们调用您的导航 Controller A 和呈现的 View Controller B

这听起来像是 A 实际上没有任何 child ,或者它有一个空白的 View Controller ,因为它是唯一的 child 。我假设您从不在 A 上调用 pushViewController(_, animated:)?当您使用 init(rootViewController:) 创建它时,您传递给 A 的是什么?

当您第一次按下菜单按钮时,UIKit 会自动关闭显示的 View Controller B,并显示空的导航 Controller A。您看到的灰色屏幕实际上是 tvOS 壁纸,它在应用的 View 层次结构之外呈现。

然后第二次按下菜单按钮实际上会导致应用程序退出,因为导航 Controller A 没有更多的 child 可以弹出。

所以听起来你应该:

  • 将 View Controller B 添加为 A 的子级,而不是显示它。

  • 或者,将 B 设置为 Root View Controller 而忽略 A

关于swift - TVOS 需要按下 2 次菜单按钮才能从根 Controller 退出到仪表板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47706122/

相关文章:

ios - 从非 TabBarViewController 或 ContainerViewController 添加 tabBarItem?

ios - 以最少的开销将缓冲区数据转换为 UInt8

ios - 应用程序扩展中的内存泄漏,UIAlertAction 附加到 UiViewController

swift - 使用 TVJS 在 TVML 上播放流媒体 URL

tvos - Apple TV 上的 tvos 应用程序与 iOS 应用程序(netflix、youtube、hbogo)的自定义 url 方案是否不同?

swift - 在我的 tvOS 应用程序中切换到另一个 View 时如何使项目保持焦点

ios - 寻找 cocoa 模块的框架

youtube - 从我的tvOS应用程序播放YouTube视频

ios - 如何为某些请求提供远程文件(从远程 SMB 服务器获取)

swift - 我在 cygwin 上得到 "<unknown>:0: error: could not load the swift standard library"