TVOS需要2个菜单按钮按钮才能从根控制器退出到仪表板

时间:2017-12-08 00:48:21

标签: swift tvos

我被指控更新现有的TVOS项目。我遇到了一些麻烦。

如果我在根控制器上(即:应用程序启动时出现的控制器。)

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

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

启动时,应用程序会加载一个呈现UIViewController的UINavigationController。 Nav控制器和呈现的ViewController都不会覆盖pressBegin,pressEnd或指定任何gestureRecongnizers来拦截或覆盖Menu按钮功能。

近,因为我可以告诉应用程序应该显示默认菜单按钮按下导航回根的行为,然后在根目录退出一次仪表板。也就是说,菜单按钮确实向后导航。它只是在根目录下不会终止应用程序。当它进入灰色/白色屏幕时,没有任何功能:applicationWill ...执行,直到第二次按下遥控器上的Menu按钮。该应用程序也将恢复到此灰色/白色屏幕。

  

我的问题是,这里发生了什么。亲爱的,我怎么能   更有效地调试此行为。

我试图彻底解释这个问题。我认识到没有代码就会变得艰难。事实上,我不知道哪些代码是相关的,因此任何可能有用的特定代码的指导或请求都将被发布。

感谢。

1 个答案:

答案 0 :(得分:2)

让我们调用您的导航控制器A和呈现的视图控制器B

听起来发生的事情是A实际上没有任何孩子,或者它有一个空白的视图控制器,因为它是唯一的孩子。我假设您从未在pushViewController(_, animated:)上致电A?使用A创建时,您传递给init(rootViewController:)的是什么?

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

然后第二次按下“菜单”按钮实际上导致应用程序辞职,因为导航控制器A没有任何其他子项可供弹出。

所以听起来你应该:

  • 将视图控制器B添加为A的子项,而不是显示它。

  • 或者,将B设置为根视图控制器并忘记A