5

根据 Apple 的指南,按下 tvOS 上的菜单按钮应该会让您返回上一个菜单,直到您位于顶部菜单,此时它应该让您返回操作系统菜单。我的问题是,如何防止菜单按钮的默认行为并阻止它返回操作系统菜单,但是当用户位于我的应用程序的顶部菜单时重新激活它?

4

3 回答 3

16

您可以像这样注册tapGestureRecognizer和设置allowedPressTypes = UIPressTypeMenu代码:

UITapGestureRecognizer *tapGestureRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
tapGestureRec.allowedPressTypes = @[@(UIPressTypeMenu)];
[self.view addGestureRecognizer:tapGestureRec];

然后,每当按下 Siri 遥控器菜单按钮时,handleTap都会调用您的方法,允许您添加所需的任何自定义逻辑。请注意,阻止菜单按钮在根视图控制器上挂起您的应用程序可能是 App Store 拒绝的原因。

您可以在此处获取有关检测手势的更多信息,并此处获取有关 pressTypes的更多信息。

于 2015-09-19T13:16:55.343 回答
6

@C_X 答案的 Swift 版本,对我有用。

let tapGesture = UITapGestureRecognizer(target: self, action: "handleTap:")
tapGesture.allowedPressTypes = [NSNumber(integer: UIPressType.Menu.rawValue)]
self.view.addGestureRecognizer(tapGesture)

斯威夫特 3 版本:

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(MyClass.handleMenuPress(_:)))
tapGesture.allowedPressTypes = [NSNumber(value: UIPressType.menu.rawValue)]
self.view.addGestureRecognizer(tapGesture)
于 2016-03-02T02:54:27.243 回答
4

这种行为是您通过使用免费获得的UINavigationController

更一般地说,容器视图控制器可以使用-gestureRecognizerShouldBegin:委托方法来允许或阻止菜单按钮轻击手势识别器开始,这取决于它是否位于嵌套的根级别。当共享UIApplication实例收到未处理的菜单按钮按下时,它会通知系统,这将导致应用程序被发送到后台。

于 2015-09-19T18:45:19.373 回答