【问题标题】:How to send app to background如何将应用程序发送到后台
【发布时间】:2015-10-24 16:39:54
【问题描述】:

在 tvOS 上,我只能通过覆盖视图上的 pressesBegan 方法从 Siri 遥控器获取按钮按下的开始状态。如果我使用手势识别器,它只会返回结束状态。问题是,当我覆盖pressesBegan 时,即使我只将它用于选择按钮,它仍然会覆盖菜单按钮的默认功能(将应用程序推到后台)。所以我正在研究如何将应用程序发送到后台并为菜单按钮调用该方法(这是默认行为),但似乎不是 kosherApple's standards 执行 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];

【问题讨论】:

  • 你试过打电话给super吗?
  • 让我忽略最简单的修复。谢谢!如果您想发布答案,我会接受。

标签: objective-c tvos


【解决方案1】:

如果您覆盖某个方法会发生某些行为,并且该行为在一个空的覆盖实现中消失,则可以推理该行为是由超类提供的。 (Cocoa 是动态且复杂的,因此此类推论并非 100% 正确,但通常足够了。)

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多