我目前正在编写一个tvOS应用程序。我一直在使用tapRecognizer检测并覆盖菜单按钮,以在故事板和其他功能之间切换。我的问题是,当我在主屏幕上并按菜单时,它不会退出应用程序。相反,它会记住我在覆盖菜单按钮时使用的最后一个函数并执行该功能。有关如何清除tapRecognizer的任何想法?或者一个将退出应用程序的功能?
我用
覆盖了菜单按钮 在Storyboard1中
tapRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(home)];
tapRecognizer.allowedPressTypes = @[[NSNumber numberWithInteger:UIPressTypeMenu]];
[self.view addGestureRecognizer:tapRecognizer];
在我的家庭子程序中,我将用户发送回我的主页故事板。但从那时起,菜单按钮不会退出应用程序,而是将我发送回storyboard1。 谢谢, SW
答案 0 :(得分:13)
不使用自己的手势识别器,而是覆盖pressBegan:
override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
if(presses.first?.type == UIPressType.Menu) {
// handle event
} else {
// perform default action (in your case, exit)
super.pressesBegan(presses, withEvent: event)
}
}
答案 1 :(得分:3)
您必须通过按菜单按钮覆盖2种方法以防止退出应用程序。
这是随时可用的模板:
override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
for press in presses {
switch press.type {
case .Menu:
break
default:
super.pressesBegan(presses, withEvent: event)
}
}
}
override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
for press in presses {
switch press.type {
case .Menu:
//Do some staff there!
self.menuButtonPressed()
default:
super.pressesEnded(presses, withEvent: event)
}
}
}
答案 2 :(得分:2)
如果您覆盖菜单按钮,则不会接受该应用:
编辑:您可以覆盖,但菜单按钮必须作为应用入口点的主屏幕后退按钮。
10.1详细信息
Siri遥控器上的菜单按钮在您的操作中表现不尽如人意 应用
具体来说,当用户启动应用程序并点击“菜单”按钮时 在Siri遥控器上,该应用程序不会退出Apple TV主屏幕。
下一步请修改您的应用以确保Siri遥控器按钮的行为 符合预期并符合Apple TV人机界面指南。
答案 3 :(得分:1)
如果您使用的是UIGestureRecognizer
而不是回复按下,那么您需要做的就是禁用识别器:
tapRecognizer.enabled = NO;
因此,如果没有UIPressTypeMenu
的识别器正在侦听,则tvOS会暂停该应用并显示主屏幕。 (我已经测试了这个)
答案 4 :(得分:0)
它可能对你有所帮助...... 这是快速的代码。
let menuPressRecognizer = UITapGestureRecognizer()
menuPressRecognizer.addTarget(self, action: #selector(YourViewController.menuButtonAction(_:)))
menuPressRecognizer.allowedPressTypes = [NSNumber(integer: UIPressType.Menu.hashValue)]
self.view.addGestureRecognizer(menuPressRecognizer)
答案 5 :(得分:0)
根据Apple的文档,对于自定义印刷机处理,我们应该覆盖所有这四种方法-
- (void)pressesBegan:(NSSet<UIPress *> *)presses withEvent:(nullable UIPressesEvent *)event NS_AVAILABLE_IOS(9_0);
- (void)pressesChanged:(NSSet<UIPress *> *)presses withEvent:(nullable UIPressesEvent *)event NS_AVAILABLE_IOS(9_0);
- (void)pressesEnded:(NSSet<UIPress *> *)presses withEvent:(nullable UIPressesEvent *)event NS_AVAILABLE_IOS(9_0);
- (void)pressesCancelled:(NSSet<UIPress *> *)presses withEvent:(nullable UIPressesEvent *)event NS_AVAILABLE_IOS(9_0);
这是XCode的官方文档:
通常,所有进行自定义新闻处理的响应者都应 覆盖所有这四种方法。
您的响应者将分别收到pressesEnded:withEvent或pressesCancelled:withEvent:
正在处理的印刷机(那些在pressesBegan:withEvent:中接收到的印刷机)。
pressesChanged:withEvent:将为提供以下内容的印刷机调用 模拟值 (如指尖或模拟按钮)
***您必须处理取消的印刷机,以确保在 你的申请。未能 这样做很可能导致错误的行为或崩溃。