使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.mApple 的SourceView 示例代码,我发现它对弄清楚如何执行上述操作非常有帮助。