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

tvOS - how to go back to home screen programmatically

在我的 tvOS 应用程序的主屏幕上,我正在使用 UITapGestureRecognizer 来观察按下的菜单按钮。根据屏幕上的内容,我需要以不同的方式处理它,但显然,在某些情况下,我想将菜单按下解释为 "exit to the home screen." 我找不到 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);
}

事实证明,我可以通过以编程方式在我希望 MENU 返回主页时从视图中删除 UITapGestureRecognizer 并在我想再次捕获它时重新添加它来完成此操作。超级笨拙,但现在效果很好。

您可以设置一个 Bool 并在您的 handleTap 功能中将其检查到 return 到主屏幕:

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

您可以为您的 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
}