如何配置基于 View 的 NSTableView
使其行为如下:
- 行可以选择
- 用户无法通过单击单元格来触发编辑模式
- 可以通过以编程方式调用
NSTableView-editColumn:row:withEvent:select:
来触发编辑模式
表格 View 是从 Xcode 界面构建器的对象库中拖出的,即它使用 NSTableCellView
(带有 NSImageView
和 NSTextField
> 作为其 subview )作为 TableView 的单元格 View 。
最佳答案
对于基于 View 的 TableView ,-editColumn:row:withEvent:select:
是比较无效的。它尝试使单元格 View 成为窗口的第一响应者,但只有某些 View 才会接受第一响应者状态。 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
将文本字段添加到 Controller 对象并实现 -controlTextDidEndEditing:
。或者,类似地,您可以添加 NSControlTextDidEndEditingNotification
的观察者。来自文本字段的通知。无论哪种方式,当调用您的代码时,您都可以设置文本字段的 editable
属性恢复为 false。 (如果您没有对相关文本字段的引用,则可以从 NSNotification
的 object
属性获取它。)
关于macos - 使 NSTableView 单元格只能以编程方式编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29312625/