【问题标题】:How to use UIKeyCommand如何使用 UIKeyCommand
【发布时间】:2017-03-08 22:03:24
【问题描述】:

当用户按下硬件键盘上的向下箭头时,我试图在表格视图中选择一行。现在,我只是想打印一个日志,我似乎无法让它工作。根据其他类似问题的答案,这是我目前所拥有的:

- (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");

}

感谢所有帮助!

【问题讨论】:

    标签: objective-c uikeycommand


    【解决方案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];
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-28
      • 1970-01-01
      • 2014-03-30
      • 2014-01-28
      • 1970-01-01
      • 2016-09-18
      • 2017-06-03
      • 2019-11-22
      • 2016-09-18
      相关资源
      最近更新 更多