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 进行编辑)。
谢谢!
您需要执行两个步骤来解决您的问题。
- 按下return按钮时触发。您可以使用 UITextFieldDelegate 的 textFieldShouldReturn 方法来完成此步骤。
在您在第 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 视图中的下一行。
我将基于视图的 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 进行编辑)。
谢谢!
您需要执行两个步骤来解决您的问题。
- 按下return按钮时触发。您可以使用 UITextFieldDelegate 的 textFieldShouldReturn 方法来完成此步骤。
在您在第 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 视图中的下一行。