tvOS - 如何以编程方式返回主屏幕

Posted

技术标签:

【中文标题】tvOS - 如何以编程方式返回主屏幕【英文标题】:tvOS - how to go back to home screen programmatically 【发布时间】:2016-02-04 07:53:04 【问题描述】:

在我的 tvOS 应用程序的主屏幕上,我正在使用 UITapGestureRecognizer 来观察被按下的菜单按钮。根据屏幕上的内容,我需要以不同的方式处理它,但显然,在某些情况下,我想将菜单按下解释为“退出主屏幕”。我找不到可以干净利落地执行此操作的 API。 exit(0) 是我能找到的最接近的地方,感觉就像崩溃了——应用程序突然消失,没有任何过渡效果。有我可以使用的 API 吗?谢谢!

- (void)viewDidLoad

    [super viewDidLoad];

    UITapGestureRecognizer *tapGestureRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(consumeTap:)];
    tapGestureRec.allowedPressTypes = @[@(UIPressTypeMenu)];
    [self.navigationController.view addGestureRecognizer:tapGestureRec];


- (void)handleTap:(id)_

    if (ShouldExitNow()) exit(0);

【问题讨论】:

【参考方案1】:

您可以设置一个Bool 并在您的handleTap 函数中检查它以返回主屏幕:

if returnToHomeScreen 
    UIControl().sendAction(#selector(NSURLSessionTask.suspend), to: UIApplication.sharedApplication(), forEvent: nil)

【讨论】:

NSURLSessionTask.suspend?该 API 根本不适合进入主屏幕......它可能会偶然工作,但我很确定它不是预期的功能。 @StilesCrisis 我同意,但似乎没有任何 clean 方法可以实现这一点。至少比使用exit(0) 好。 好吧,我找到并发布了一个解决方案,它可以完美地工作,而不依赖于未记录的 API。您必须兼顾添加/删除处理程序,但这一切都在记录的 API 中。像这样的技巧很可能会导致您的应用被拉下。【参考方案2】:

事实证明,我可以通过在我希望 MENU 回家时以编程方式从视图中删除 UITapGestureRecognizer 来做到这一点,并在我想再次捕获它时重新添加它。超级笨拙,但现在效果很好。

【讨论】:

【参考方案3】:

您可以为您的 UITapGestureRecognizer 设置委托,并实现以下 UIGestureRecognizerDelegate 方法:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive press: UIPress) -> Bool 
    // return false to skip your handling of this menu button press
    // (and perform default "go to home" system action)
    // or return true to handle it by yourself

【讨论】:

以上是关于tvOS - 如何以编程方式返回主屏幕的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式设置主屏幕壁纸(更改主屏幕和锁定屏幕)

PWA:如何以编程方式触发:“添加到主屏幕”?在 iOS Safari 上

iOS - 以编程方式截取跳板(主屏幕)的屏幕截图

如何在 Swift 5 中以编程方式在特定屏幕(即主显示器而不是外部显示器)上显示窗口? [苹果系统; Xcode 15]

以编程方式将图标添加到主屏幕

如何在 tvOS 的同一视图中显示 UISearchController?