【问题标题】:tvOS - how to go back to home screen programmaticallytvOS - 如何以编程方式返回主屏幕
【发布时间】: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);
}

【问题讨论】:

    标签: tvos uitapgesturerecognizer


    【解决方案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
      }
      

      【讨论】:

        猜你喜欢
        • 2011-04-13
        • 2019-07-22
        • 1970-01-01
        • 1970-01-01
        • 2011-07-12
        • 1970-01-01
        • 2012-08-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多