仅以编程方式编辑NSTableView单元格

时间:2015-03-28 01:28:34

标签: macos cocoa nstableview

如何将基于视图的NSTableView配置为如此:

  • 可选择行
  • 用户无法通过单击单元格
  • 来触发编辑模式
  • 可以通过编程方式调用NSTableView-editColumn:row:withEvent:select:来触发编辑模式

表视图是从Xcode界面构建器的对象库中拖出的,即它使用NSTableCellViewNSImageViewNSTextField作为其子视图)作为表视图细胞视图。

1 个答案:

答案 0 :(得分:4)

对于基于视图的表格视图,-editColumn:row:withEvent:select:相对无效。它尝试使单元格视图成为窗口的第一个响应者,但只有某些视图才会接受第一个响应者状态。 NSTableCellView没有,因为它本身不可编辑。

如果您想以编程方式在NSTableCellView内的文本字段中启动编辑,您可以执行以下操作:

NSTableCellView* cellView = (NSTableCellView*)[tableView viewAtColumn:col row:row makeIfNecessary:YES];
if ([cellView.textField acceptsFirstResponder])
    [cellView.window makeFirstResponder:cellView.textField];

要禁止用户通过UI开始编辑,我认为您需要将文本字段设置为不可编辑。您可以在以编程方式开始编辑之前使其可编辑。例如,在上面两行之间添加一行cellView.textField.editable = YES;

然后,您需要在编辑结束后将其设置回不可编辑状态。为此,您可以将文本字段的delegate设置为控制器对象并实现-controlTextDidEndEditing:。或者,类似地,您可以从文本字段添加NSControlTextDidEndEditingNotification通知的观察者。无论哪种方式,当您的代码被调用时,您将文本字段的editable属性设置为false。 (如果您没有对相关文本字段的引用,可以从NSNotification的{​​{1}}属性中获取它。)