在NSTableView中编辑NSTextField时按Enter键时选择下一行

时间:2015-09-24 07:57:46

标签: swift cocoa nstableview nstextfield

我在基于视图的NSTextField中设置了一些NSTableView可编辑,并在“结束编辑”上发送操作(因此当按下Enter或Tab时,或焦点是丢失)。点击Tab时的行为是完美的:当前单元格右侧的单元格被选中并准备好进行编辑。 Shift + Tab也是如此。按Enter键时,该字段被“停用”,但同一行保持选中状态,这是正常行为。 我想要实现的是Tab的垂直版本,使用Enter键。

要明确:我正在我的桌子内编辑NSTextField。我点击了Enter。我想要选择下一行,并且我之前编辑的同一列中的字段应该“激活”(意味着它变成可编辑的NSTextField,其当前内容突出显示)。该动作仍应正常触发,就像在编辑单元格时按Tab键一样。

这可能吗?如果是,我将如何进行?

我考虑过对NSTextField进行子类化并稍微使用keyDown,但我想我必须使用通知中心来触发回调,这会使我的表格中的行选择发生变化激活下一个表格单元格。这看起来有点矫枉过正,我不知道如何让后者发生(激活NSTextField进行编辑)。

谢谢!

2 个答案:

答案 0 :(得分:2)

我会使用NSControlTextEditingDelegate方法

- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)command

使用文本字段检测回车键和

- (void)editColumn:(NSInteger)columnIndex row:(NSInteger)rowIndex withEvent:(NSEvent *)theEvent select:(BOOL)flag

选择表格视图中的下一行。

答案 1 :(得分:-1)

您需要通过两个步骤来解决问题。

  1. 按下返回按钮时触发。您可以使用 UITextFieldDelegate textFieldShouldReturn 方法完成此步骤。
  2. 在步骤1中使用的方法中,选择tableView中的下一行。

    NSIndexPath *nextIndexPath = [NSIndexPath indexPathForRow:indexPath.row + 1 inSection:indexPath.section]; [self.tableView selectRowAtIndexPath: nextIndexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; [self tableView:self.tableView didSelectRowAtIndexPath: nextIndexPath];

  3. 希望得到这个帮助。