当用户按下硬件键盘上的向下箭头时,我试图在表视图中选择一行。现在,我只是想打印一个日志,但我似乎无法让它工作。根据其他类似问题的答案,我到目前为止所得到的答案如下:
- (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");
}感谢所有的帮助!
发布于 2017-02-28 22:19:06
我不知道您的错误,可能是您没有向您的方法中添加(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];
}https://stackoverflow.com/questions/40263960
复制相似问题