Button tvos覆盖按钮开始

Button tvos覆盖按钮开始,button,menu,tvos,Button,Menu,Tvos,我想我遗漏了一些基本的东西,但我无法让按键正确覆盖 我试图检测菜单按钮的按下,因此我覆盖按开始:并测试UIPressTypeMenu。该方法捕捉到菜单按钮按下,并执行我的代码,但随后立即退出应用程序 这是我的重写方法。有人知道我做错了什么吗?我还需要什么来覆盖自动菜单退出吗?好像有两个响应者。左拍和右拍的处理方式相同。它们被识别,我的代码被激活,但是焦点还是会改变,因为我还没有完全处理这个事件 我在应用程序的第一个视图控制器中尝试了该代码,菜单被正确覆盖。然后,我设置了一个空白视图,并将该视图显

我想我遗漏了一些基本的东西,但我无法让按键正确覆盖

我试图检测菜单按钮的按下,因此我覆盖
按开始:
并测试
UIPressTypeMenu
。该方法捕捉到菜单按钮按下,并执行我的代码,但随后立即退出应用程序

这是我的重写方法。有人知道我做错了什么吗?我还需要什么来覆盖自动菜单退出吗?好像有两个响应者。左拍和右拍的处理方式相同。它们被识别,我的代码被激活,但是焦点还是会改变,因为我还没有完全处理这个事件

我在应用程序的第一个视图控制器中尝试了该代码,菜单被正确覆盖。然后,我设置了一个空白视图,并将该视图显示为视图编号2,我无法获得要覆盖的方法

- (void)pressesBegan:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event {

    for(UIPress *press in presses) {
        if(press.type == UIPressTypeMenu) {

            [(UIImageView *) [self.view viewWithTag:100] setUserInteractionEnabled:NO];

        }
        if(press.type == UIPressTypePlayPause) {
            // play and pause code
        }
    } 
}


-(void) pressesEnded:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event {

    // 
    for(UIPress *press in presses) {
        if(press.type == UIPressTypeMenu) {
            // do ButtonA job
            NSLog(@"test");
        }
        if(press.type == UIPressTypePlayPause) {
            // do ButtonX job
        } else {


        }
    }

}

-(void) pressesChanged:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event {

    // Works fine!
    for(UIPress *press in presses) {
        if(press.type == UIPressTypeMenu) {
            // do ButtonA job
        }
        if(press.type == UIPressTypePlayPause) {
            // do ButtonX job
        }
    }

}

-(void) pressesCancelled:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event {

    // Works fine!
    for(UIPress *press in presses) {
        if(press.type == UIPressTypeMenu) {
            // do ButtonA job
            NSLog(@"cancelled");
        }
        if(press.type == UIPressTypePlayPause) {
            // do ButtonX job
        }
    }
}
-(无效)按开始:(NSSet*)按withEvent:(UIPresseEvent*)事件{
用于(UIPress*压入式压力机){
如果(按.type==ui按类型菜单){
[(UIImageView*)[self.view view with tag:100]setUserInteractionEnabled:NO];
}
如果(按.type==ui按类型播放暂停){
//播放和暂停代码
}
} 
}
-(void)按SENDED:(NSSet*)按withEvent:(UIPressesEvent*)事件{
// 
用于(UIPress*压入式压力机){
如果(按.type==ui按类型菜单){
//干活儿
NSLog(“测试”);
}
如果(按.type==ui按类型播放暂停){
//干活儿
}否则{
}
}
}
-(无效)按更改:(NSSet*)按withEvent:(UIPresseEvent*)事件{
//很好!
用于(UIPress*压入式压力机){
如果(按.type==ui按类型菜单){
//干活儿
}
如果(按.type==ui按类型播放暂停){
//干活儿
}
}
}
-(无效)按取消:(NSSet*)按withEvent:(UIPressesEvent*)事件{
//很好!
用于(UIPress*压入式压力机){
如果(按.type==ui按类型菜单){
//干活儿
NSLog(@“已取消”);
}
如果(按.type==ui按类型播放暂停){
//干活儿
}
}
}

应用程序正在退出,因为您允许
按Send:withEvent:
消息返回到响应者链的顶部。您还应该覆盖该方法,如果您不希望应用程序退出,请不要调用
super
(但在这里要小心:如果用户无法使用菜单退出,他们将对您非常失望)

左箭头和右箭头触发焦点更改,因为这些更改是通过手势识别器处理的,而不是通过
按开始
/
按结束
方法处理的,因此视图是否覆盖这些更改并不重要


有更多关于手势识别器和UIResponder方法如何相互作用的详细信息。

不要在游戏场景中忘记这一点:

override func didMoveToView(view: SKView) {
    super.didMoveToView(view)
}

谢谢你潜在的帮助!实际上,我还覆盖了PresseEnd、PresseChanged和PresseCancelled。对不起,我也应该把这些放在我的问题里。我没有在任何方法中调用super。你确定这些方法正在被调用吗?请尝试在调试器中设置断点或添加一些日志以确保安全。您能否修改您的问题以包含这些方法的代码?实际上,PresseSend似乎没有被调用。虽然在我第一次查看时,PresseEnd没有被调用,但菜单按钮仍被覆盖。实际上,我看到PresseEnd在UIPressTypeLeft、Up、Right、Down、UIPressTypeSelect和UIPressTypePlay上被调用,但在UIPressTypeMenu上没有。按menu(功能表)按钮只能调用PresseBegind(开始)和PresseCancelled(取消)。(不确定为什么会调用pressesCancelled)如果我在viewDidLoad中添加[self.view canBecomeFirstResponder],则我的菜单仍将退出,但当我直接返回该视图时,PresseSend将被调用,但它仍然无法识别菜单按钮。你被取消了,因为手势识别器正在启动:你的应用程序中一定有一个手势识别器配置为监听菜单按钮。如果您在此处切换到使用手势识别器(而不是按开始等),则您应该能够同时识别。我链接到的事件处理指南解释了手势如何取消触摸和按压。您解决了这个问题吗?我还试图捕捉菜单按钮。