Как использовать UIKeyCommand

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

- (NSArray *)keyCommands {
UIKeyCommand *downArrowKeyCommand = [UIKeyCommand keyCommandWithInput:UIKeyInputDownArrow
                                                        modifierFlags:0
                                                               action:@selector(hardwareKeyboardDownArrowPressed)];

return @[downArrowKeyCommand];
}

- (BOOL)canBecomeFirstResponder {
return YES;
}

- (void)hardwareKeyboardDownArrowPressed {

NSLog(@"Down arrow pressed on external keyboard");

}

Вся помощь приветствуется!

1 ответ

Решение

Я не знаю вашу конкретную ошибку; возможно, вы еще не добавили (id)sender к вашему методу. Я понял, как это сделать. Я добавлю свой код ниже:

- (BOOL)canBecomeFirstResponder {
    return YES;
}

- (NSArray *)keyCommands {
    return @[[UIKeyCommand keyCommandWithInput:UIKeyInputDownArrow modifierFlags:0 action:@selector(moveDownOneRow:) discoverabilityTitle:@"Select row down"],
             [UIKeyCommand keyCommandWithInput:UIKeyInputUpArrow modifierFlags:0 action:@selector(moveUpOneRow:) discoverabilityTitle:@"Select row up"]];
}

- (void)moveDownOneRow:(id)sender {
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

    if (indexPath == nil) {
        indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    } else {
        if ((indexPath.row + 1) < [self.tableView numberOfRowsInSection:0]) {
            indexPath = [NSIndexPath indexPathForRow:indexPath.row+1 inSection:0];
        }
    }

    [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionMiddle];
}

- (void)moveUpOneRow:(id)sender {
    NSIndexPath *indexPath = [self.tableViewindexPathForSelectedRow];

    if (indexPath == nil) {
        indexPath = [NSIndexPath indexPathForRow:([self.tableView numberOfRowsInSection:0]-1) inSection:0];
    } else {
        if ((indexPath.row - 1) >= 0) {
            indexPath = [NSIndexPath indexPathForRow:indexPath.row-1 inSection:0];
        }
    }

    [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionMiddle];
}
Другие вопросы по тегам