Select 在 NSTableView 中编辑 NSTextField 时按下 Enter 时的下一行

Select next row when Enter is pressed while editing a NSTextField inside a NSTableView

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

明确一点:我正在 table 中编辑 NSTextField。我按回车键。我希望下一行被选中,并且我之前编辑的同一列中的字段应该变为 "activated"(这意味着它变成了 editable NSTextField 并突出显示其当前内容).该操作仍应正常触发,就像您在编辑单元格时按 Tab 键一样。

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

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

谢谢!

您需要执行两个步骤来解决您的问题。

  1. 按下return按钮时触发。您可以使用 UITextFieldDelegatetextFieldShouldReturn 方法来完成此步骤。
  2. 在您在第 1 步中使用的方法中,select 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];

希望对您有所帮助。

我会使用 NSControlTextEditingDelegate 方法

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

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

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

到 select 视图中的下一行。