【问题标题】:NSTable/OutlineView: Edit textfield in a row without selecting the rowNSTable/OutlineView:在行中编辑文本字段而不选择行
【发布时间】:2015-09-06 01:51:55
【问题描述】:

上下文:

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

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

我想要什么:

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

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

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

【问题讨论】:

    标签: objective-c cocoa nstableview nstextfield nsoutlineview


    【解决方案1】:

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

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

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

    【讨论】:

    • 这非常有效。但是,我将不得不重新考虑我的方法。我明白为什么 Apple 在编辑 textField 之前需要行选择——如果你不这样做,就不再可能抓住行并拖动它来重新排序。现在第一次单击编辑字段而不是拖动。
    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    相关资源
    最近更新 更多