在tvOS上,我只能通过覆盖视图上的pressesBegan
方法从Siri遥控器获取按钮的开始状态。如果我使用手势识别器,它只返回结束状态。当我覆盖pressesBegan
时,即使我只将它用于选择按钮,它仍会覆盖菜单按钮的默认功能(将应用程序推送到后台)。所以我正在研究如何将应用程序发送到后台并为菜单按钮调用该方法(这是默认行为),但似乎kosher每Apple's standards that discussed 3}}
以下是我的参考代码:
-(void)pressesBegan:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event {
for (UIPress* press in presses) {
switch (press.type) {
case UIPressTypeSelect:
NSLog(@"press began");
break;
case UIPressTypeMenu:
// this is where I would call the send to background call if Apple would allow that
// removing this case also has no effect on what happens
break;
default:
break;
}
}
作为替代方案,这只发送按钮释放信号,但没有任何按下开始。
UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(gestureTap:)];
tapGesture.allowedPressTypes = @[[NSNumber numberWithInteger:UIPressTypeSelect]];
[view addGestureRecognizer:tapGesture];
答案 0 :(得分:1)
如果您不覆盖某个方法时会发生某些行为,并且该行为在空覆盖实现中消失,则可以理解是否已提供此行为由超类。 (可可是动态和复杂的,所以这种推论在100%的时间都不是真的,但通常就足够了。)
因此,如果您不希望覆盖更改默认行为,请致电super
:
case UIPressTypeMenu:
[super pressesBegan: presses withEvent: event];
break;