NSTable/OutlineView: 在不选择行的情况下编辑一行中的文本字段

NSTable/OutlineView: Edit textfield in a row without selecting the row

上下文:

我有一个类似于源列表的 NSOutlineView,但不使用实际的源列表突出显示样式。 (想象一下 Finder 中的边栏。)

此 outlineView 只有两个级别:1) "groups" 和 2) "subitems"。没有额外的嵌套 --- 同样,就像 Finder 中的源列表一样。

我想要什么:

我的 OutlineView 中的顶级 "group" 行是 NSTableCellViews 和一个 NSTextField。我希望我的用户能够编辑此 textField 中的文本(重命名组)WITHOUT 允许他们 select OutlineView 中的整个组行。

到目前为止,我还没有找到执行此操作的方法。如果我在我的 OutlineView 委托中阻止 selection of group rows,则无法编辑文本字段。当我 allow selection 组行时,我可以让文本字段像任何其他文本字段一样进行编辑。

缺少子类化和自己处理鼠标事件,有没有简单的方法来做到这一点? NSTableView 中的一行必须总是 selected 才能编辑该行中的 textFields 吗?

我认为使用 NSOutlineView 的自定义子类会起作用,如果提议的第一响应者在组行中,您可以在其中将 -validateProposedFirstResponder:forEvent: 覆盖为 return true。 Return 任何其他提议的第一响应者的超级 return。

您可以通过调用 -rowForView: 来确定建议的第一响应者在哪一行。

从编写基于视图的 table 视图内容的 Apple 工程师那里看到这个 blog post