如何将基于视图的NSTableView
配置为如此:
NSTableView-editColumn:row:withEvent:select:
来触发编辑模式表视图是从Xcode界面构建器的对象库中拖出的,即它使用NSTableCellView
(NSImageView
和NSTextField
作为其子视图)作为表视图细胞视图。
答案 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}}属性中获取它。)