使NSOutlineView缩进多列的最简单或推荐方法是什么?默认情况下,它仅缩进大纲列;据我所知,没有内置支持使其缩进其他列。
我有一个NSOutlineView,它显示了两组分层数据之间的比较。对于视觉吸引力,如果大纲列中的某些项目是缩进的,我想用相同的缩进量缩进另一列中同一行上的项目。 (还有第三列显示比较两个项目的结果,此列不应缩进。)
这只能通过继承NSOutlineView来实现吗?什么需要在子类中重写?或者是否有更容易的方法来缩进多列?
答案 0 :(得分:2)
事实证明比我预期的要容易。这是解决方案的草图。要缩进NSOutlineView中除大纲列以外的列,您可以:
indentation
,并为其提供访问器和mutator方法- (void) drawWithFrame: (NSRect) frame inView: (NSView*) view { NSRect newFrame = frame; newFrame.origin.x += indentation; newFrame.size.width -= indentation; [super drawWithFrame: newFrame inView: view]; }
editWithFrame:inView
和selectWithFrame:inView:
,类似于上述内容- (NSSize) cellSize { NSSize cellSize = [super cellSize]; cellSize.width += indentation; return cellSize; }
- (void) outlineView: (NSOutlineView *) view willDisplayCell: (id) cell forTableColumn: (NSTableColumn *) column item: (id) item { if (column == theColumnToBeIndented) { [cell setIndentation: [view indentationPerLevel] * [view levelForItem: item]]; } }
如果您仍然无法使其工作,您可能需要查看Apple SourceView sample code中的ImageAndTextCell.m
,我发现这对于确定如何执行上述操作非常有帮助。< / p>