UIKeyCommand с модификатором не будет распознан при первом вызове

Я поддерживаю сочетания клавиш в моем приложении iOS через обслуживание UIKeyCommand экземпляры с моей точки зрения контроллера.

Следующее работает как талисман и вызывает вызываемый селектор при каждом нажатии e:

- (BOOL)canBecomeFirstResponder {
    return YES;
}

- (NSArray *)keyCommands {
    return @[
        [UIKeyCommand keyCommandWithInput:@"e" modifierFlags:0 action:@selector(foo:)]];
    ];
}

Тем не менее, я хочу, чтобы ключевая команда была +e, или

[UIKeyCommand keyCommandWithInput:@"e" modifierFlags:UIKeyModifierCommand action:@selector(foo:)]

Это все еще работает, вроде. Это не сработает при первом нажатии +e, но после этого будет работать как шарм. Почему это происходит и как я могу это исправить?

1 ответ

Решение

Это известная ошибка. В качестве обходного пути вы можете зарегистрироваться, чтобы отвечать только на клавишу Command, передавая пустую строку и селектор, который ничего не делает:

[UIKeyCommand keyCommandWithInput:@""
                    modifierFlags:UIKeyModifierCommand 
                           action:@selector(doNothing:)]

Затем, когда пользователь нажмет ⌘+e, это будет второй вызов, и он зарегистрируется нормально.

Более подробную информацию об ошибке можно найти здесь, на OpenRadar. Он был представлен 27 января 2015 года, а 24 февраля отмечен как дубликат.

Другие вопросы по тегам