NSTable / OutlineView:连续编辑文本字段而不选择行

时间:2015-09-06 01:51:55

标签: objective-c cocoa nstableview nstextfield nsoutlineview

上下文

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

此outlineView只有两个级别:1)“组”和2)“子项”。没有额外的嵌套 - 再次,就像Finder中的源列表一样。

我想要的:

我的OutlineView中的顶级“组”行是NSTableCellViews,只有一个NSTextField。我希望我的用户能够编辑此textField中的文本(重命名组) WITHOUT 允许他们在OutlineView中选择整个组行。

到目前为止,我还没有办法做到这一点。如果我阻止在我的代理中为OutlineView选择组行,则无法编辑文本字段。当我允许选择组行时,我可以像其他任何一样编辑文本字段。

没有自己的子类化和处理鼠标事件,有没有一种简单的方法可以做到这一点?在编辑该行中的textFields之前,是否必须始终选择NSTableView中的一行?

1 个答案:

答案 0 :(得分:1)

我认为使用NSOutlineView的自定义子类会覆盖-validateProposedFirstResponder:forEvent:,如果建议的第一响应者位于组行中,则返回true。返回任何其他建议的第一响应者的超级回报。

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

请参阅撰写基于视图的表格视图内容的Apple工程师的blog post