【问题标题】:How do I customize NSOutlineView to have border color?如何自定义 NSOutlineView 使其具有边框颜色?
【发布时间】:2015-08-23 13:38:27
【问题描述】:
我查看了谷歌,但没有找到很多这方面的例子。大多数只与 NSTableView 相关。
如何子类化我的 NSOutlineView 使其看起来与 XCode 的 plist 编辑器完全一样?我不知道如何获得如下所示的边框颜色。我目前的工作方式完全相同,除了着色。任何帮助,将不胜感激。
更新
我感到困惑的部分是绘制代码应该是什么样子。谷歌在这方面对我帮助不大。
【问题讨论】:
标签:
objective-c
macos
cocoa
interface-builder
nsoutlineview
【解决方案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 中获取即将选择的节点。获得此节点后,您可以通过获取该即将选择的行下方的行中表示的节点来确定哪些行需要边框。如果给定节点是新选择的后代,那么它将需要某种边框(提示:NSTreeNode 的 indexPath 属性在这里派上用场)。
第 3 步:确保大纲视图使用您的自定义行视图
实现以下委托方法,以便它返回您的自定义行视图:
- (NSTableRowView *)outlineView:(NSOutlineView *)outlineView rowViewForItem:(id)item
请注意,第二个 item 参数是一个 NSTreeNode 对象。通过记录(某种地图)哪些节点与哪些边界相关联,然后您可以设置 NSTableRowView 子类的 border 掩码属性。