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

标签 objective-c cocoa nstableview nstextfield nsoutlineview

上下文:

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

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

我想要什么:

我的 OutlineView 中的顶级“组”行是带有单个 NSTextFieldNSTableCellViews。我希望我的用户能够编辑此文本字段中的文本(以重命名该组)但不允许允许他们在 OutlineView 中选择整个组行。

到目前为止,我还没有找到一种方法来做到这一点。如果我阻止在 OutlineView 的委托(delegate)中选择组行,则无法编辑文本字段。当我允许选择组行时,我就可以像其他任何文本字段一样编辑文本字段。

除了子类化事物和自己处理鼠标事件之外,有没有一种简单的方法可以做到这一点?在编辑该行中的文本字段之前,必须始终选择 NSTableView 中的一行吗?

最佳答案

我认为使用 NSOutlineView 的自定义子类会起作用,在该子类中,如果建议的第一响应者在一个组中,您可以重写 -validateProposeFirstResponder:forEvent: 返回 true排。返回任何其他提议的第一响应者的 super 返回值。

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

查看此blog post来自编写基于 View 的表格 View 内容的 Apple 工程师。

关于objective-c - NSTable/OutlineView : Edit textfield in a row without selecting the row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32419287/

相关文章:

ios - 使用 BFTask 和 AWS SDK iOS v2 控制上传到 S3

ios - 如果语句没有被调用

ios - 接口(interface) 'my_framework' 上类别 'NSObject' 的重复定义

cocoa - 从许多其他音频的部分制作音频

Cocoa - 在 TableView 上过滤数组 NSDictionary

cocoa - 单击 NSTableCellView 内的 NSTextView 时如何选择 NSTableView 中的行?

objective-c - 基于 View 的 NSTableView 选择突出显示

c++ - 指向 objc 类成员方法的函数指针,用于 C++?

objective-c - "image not found"使用自定义框架时出错

objective-c - 如何获得有意义的 CIAreaHistogram 输出?