当按下所呈现的模态视图控制器时,允许菜单按钮退出tvOS应用程序

时间:2015-12-30 02:09:58

标签: storyboard tvos siri-remote

我有一个tvOS应用程序,其中UITabBarController是主要故事板的主要入口点。如果用户未登录,则UITabBarController会以LoginViewController模式显示。

当用户按下Siri遥控器上的菜单按钮时,系统会自动关闭LoginViewController并显示UITabBarController。我想让应用程序退出到tvOS床头板。

期望解决方案涉及UITapGestureRecognizer覆盖菜单按钮操作或覆盖pressesBegan/pressesTouched,但我还没有找到解决方案。

2 个答案:

答案 0 :(得分:4)

以下代码段有效,并且是基于Apples HIG for Remotes and Interactions

中菜单按钮的预期行为的可接受行为
override func viewDidLoad() {
    super.viewDidLoad()

    let tapRecognizer = UITapGestureRecognizer(target: self, action: "tapped")
    tapRecognizer.allowedPressTypes = [NSNumber(integer: UIPressType.Menu.rawValue)];
    self.view.addGestureRecognizer(tapRecognizer)
}

func tapped() {
    exit(EXIT_SUCCESS)
}

答案 1 :(得分:1)

我的情况非常相似,看起来像这样:

               +--------------------+
        ------>| MainViewController |
               +--------------------+
                         |
           +-------------+-------------+
           |                           |
           v                           v
+---------------------+      +--------------------+
| LoginViewController |      | HomeViewController |
+---------------------+      +--------------------+

如果出现LoginViewControllerHomeViewController,我希望菜单按钮关闭应用并返回电视主屏幕,MainViewController

经过大量谷歌搜索后,我决定采用这种解决方案,似乎运行良好而不会触发警告或要求拨打exit

class MainViewController: UIViewController {
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        super.prepare(for: segue, sender: sender)
        UIApplication.shared.keyWindow?.rootViewController = segue.destination
    }
}

希望这对那里的人有帮助