如何将应用程序发送到后台

How to send app to background

在 tvOS 上,我只能通过重写视图上的 pressesBegan 方法从 Siri 遥控器获取按钮按下的开始状态。如果我使用手势识别器,它只会 returns 结束状态。问题是,当我覆盖 pressesBegan 时,即使我只将它用于 select 按钮,它仍然会覆盖菜单按钮的默认功能(将应用程序推送到后台)。所以我正在研究如何将应用程序发送到后台并为菜单按钮调用该方法(默认行为),但它似乎不是 kosher per Apple's standards to do that.

这是我的代码供参考:

-(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];

当您重写方法时会发生某些行为,并且该行为在空的重写实现中消失,按理说行为是由超类。 (Cocoa 是动态的和复杂的,所以这样的推论并非 100% 正确,但通常足够了。)

因此,如果您不希望覆盖更改默认行为,只需调用 super

case UIPressTypeMenu:
    [super pressesBegan: presses withEvent: event];
    break;