1

我有一个 tvOS 应用程序,它UITabBarController作为主故事板的主要入口点。如果用户未登录,则UITabBarController显示LoginViewController模态。

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

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

4

2 回答 2

5

以下代码段有效,并且是基于 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)
}
于 2016-01-03T05:18:38.207 回答
2

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

               +--------------------+
        ------>| 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
    }
}

希望这对那里的人有帮助

于 2017-02-26T12:47:42.440 回答