修剪NSOutlineView的一些缩进级别

6
我有一个大纲视图,希望在顶层不缩进(因为它们已经具有独特的外观),但是对于后续级别,我想缩进。我该如何做到这一点?我尝试重写 -levelForRow:-levelForItem: 从返回值中减去2,但没有帮助。我还尝试重写-frameOfOutlineCellAtRow: 从框架的宽度中减去2 * indentationPerLevel, 但也没有帮助,可能是因为我没有显示展开三角形。你有什么想法可以解决这个问题吗?大纲视图绑定了一个 NSTreeController,使得难以平整底层数据结构,但我已经设置了一个大纲视图代理。

你能给我展示一下你想要的屏幕截图或草图吗?无论如何,请检查我的答案和屏幕截图,如果这是你想要的,请评论。 - Anoop Vaidya
1个回答

9
解决方案是使用frameOfCellAtColumn:row:,这是一个NSTableView方法。
- (NSRect)frameOfCellAtColumn:(NSInteger)column row:(NSInteger)row;
{
    NSRect frame = [super frameOfCellAtColumn:column row:row];

    if (column == (NSInteger)[self.tableColumns indexOfObjectIdenticalTo:self.outlineTableColumn]) {
        if (this-item-or-row-matches-your-conditions) {
            frame.origin.x -= self.indentationPerLevel;
            frame.size.width += self.indentationPerLevel;
        }
    }

    return frame;
}

这个方法控制单元格式和视图式表视图以及大纲视图中的布局。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接