如何自定义 NSOutlineView 以具有边框颜色?

How do I customize NSOutlineView to have border color?

我查看了 google 但没有找到很多这方面的例子。大多数只与 NSTableView 有关。

如何将我的 NSOutlineView 子类化,使其看起来与 XCode 的 plist 编辑器完全一样?我不知道如何获得如下所示的边框颜色。我目前的工作方式完全相同,除了着色。任何帮助,将不胜感激。

更新 我感到困惑的部分是绘制代码应该是什么样子。 Google 在这方面对我帮助不大。

第 1 步:创建一个 NSTableViewRow 子类

边框绘制在构成 table 行的 NSTableRowView 个实例上。要获得它们,您可以子类化 NSTableRowView 并给它一个 borders 属性 来存储一个掩码,指定您要在行上绘制哪些边框。您将伴随着 drawRect 的自定义实现,它首先调用 super,然后在指定的边框上描边。

第 2 步:实现在需要更新边框时发出信号的委托方法

最简单的情况,我能想到三种:

- (void)outlineViewItemWillExpand:(NSNotification *)notification
- (void)outlineViewItemDidCollapse:(NSNotification *)notification
- (NSIndexSet *)         outlineView:(NSOutlineView *)outlineView 
selectionIndexesForProposedSelection:(NSIndexSet *)proposedSelectionIndexes

这是您努力工作的地方。我会先尝试最后一个。将有许多不同的方法来执行此操作,但您可以从 proposedSelectionIndexes 参数中结合 NSOutlineView api 获取即将被选择的节点。获得此节点后,您可以通过获取此即将被选中的行下方的行中表示的节点来计算出哪些行需要边框。如果给定节点是新选择的后代,那么它将需要某种边界(提示:NSTreeNodeindexPath 属性 在这里派上用场)。

第 3 步:确保大纲视图使用您的自定义行视图

实施以下委托方法,以便 returns 您的自定义行视图:

 - (NSTableRowView *)outlineView:(NSOutlineView *)outlineView rowViewForItem:(id)item

请注意,第二个 item 参数是一个 NSTreeNode 对象。通过记录哪些节点与哪些边界相关联(某种地图),然后您可以设置 NSTableRowView 子类的 border 掩码 属性。