使NSOutlineView缩进多列的最简单或推荐的方法是什么?默认情况下,它只缩进大纲列;据我所知,没有内置支持使其缩进其他列。
我有一个 NSOutlineView,它显示了两组分层数据之间的比较。为了视觉吸引力,如果大纲列中的某些项目是缩进的,我想将另一列中同一行上的项目缩进相同的缩进量。(还有第三列显示比较两个项目的结果,此列不应该缩进。)
这只能通过继承 NSOutlineView 来实现吗?在子类中需要覆盖什么?或者有没有更简单的方法让它缩进多列?
使NSOutlineView缩进多列的最简单或推荐的方法是什么?默认情况下,它只缩进大纲列;据我所知,没有内置支持使其缩进其他列。
我有一个 NSOutlineView,它显示了两组分层数据之间的比较。为了视觉吸引力,如果大纲列中的某些项目是缩进的,我想将另一列中同一行上的项目缩进相同的缩进量。(还有第三列显示比较两个项目的结果,此列不应该缩进。)
这只能通过继承 NSOutlineView 来实现吗?在子类中需要覆盖什么?或者有没有更简单的方法让它缩进多列?
结果比我预期的要容易。这是解决方案的草图。要在 NSOutlineView 中缩进除大纲列之外的列,您可以:
indentation
为 MYIndentedCell添加一个实例变量,并为其提供访问器和修改器方法- (void) drawWithFrame: (NSRect) frame inView: (NSView*) view { NSRect newFrame = 框架; newFrame.origin.x += 缩进; newFrame.size.width -= 缩进; [超级drawWithFrame:newFrame inView:view]; }
editWithFrame:inView
并与上述类似selectWithFrame:inView:
- (NSSize) 细胞大小 { NSSize cellSize = [超级 cellSize]; cellSize.width += 缩进; 返回单元格大小; }
- (void) outlineView: (NSOutlineView *) 视图 willDisplayCell: (id) 单元格 forTableColumn: (NSTableColumn *) 列 项目:(id)项目 { if (column == theColumnToBeIndented) { [单元格设置缩进: [view indentationPerLevel] * [view levelForItem: item]]; } }
如果您仍然无法使其正常工作,您可能需要查看ImageAndTextCell.m
Apple 的SourceView 示例代码,我发现它对弄清楚如何执行上述操作非常有帮助。