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