如何自定义NSOutlineView以使用边框颜色?

时间:2015-06-08 22:27:11

标签: objective-c macos cocoa interface-builder nsoutlineview

我查看了谷歌,但没有找到很多这方面的例子。大多数只涉及NSTableView。

如何将我的NSOutlineView子类化为与XCode的plist编辑器完全相同?我不知道如何获得下面显示的边框颜色。我目前的工作方式完全相同,除了着色。任何帮助,将不胜感激。 enter image description here

更新 我很困惑的部分是绘制代码应该是什么样子。谷歌对此并没有多大帮助。

1 个答案:

答案 0 :(得分:1)

第1步:创建NSTableViewRow子类

边框绘制在构成表格行的NSTableRowView个实例上。要获取它们,您可以继承NSTableRowView并为其提供一个borders属性,该属性存储一个掩码,指定要在该行上绘制哪些边框。您可以使用自定义的drawRect实现,首先调用 super ,然后在指定的边框上进行描边。

第2步:实施委派方法,以便在需要更新边框时发出信号

在最简单的情况下,我可以想到三个:

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

这是您可以找到辛勤工作的地方。我先从最后一个开始。将会有很多不同的方法,但您可以从proposedSelectionIndexes参数中选择与NSOutlineView api一起选择的节点。获得此节点后,您可以通过获取此即将被选中的行下方的行中表示的节点来确定哪些行需要边框。如果给定节点是新选择的后代,那么它将需要某种边界(提示:indexPath NSTreeNode属性在这里派上用场。)

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

实现以下委托方法,以便它返回自定义行视图:

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

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