NSOutlineView缩进问题

6
我使用NSOutlineView对象来表示文件结构,并发现它无法正确缩进可展开的子项,但可以缩进未展开的子项。以下是示意图:
在此示例中,“AnotherFolder”是“Folder2”的子级,但它没有与其他缩进的文件对齐缩进。有趣的是,“AnotherFolder”的子项“AnotherFile.java”确实正确缩进(2级)。
我尝试设置属性,例如“indentationFollowsCells”,但都没有效果。这似乎应该非常简单,但我无法解决它。
谢谢!
编辑:根据要求提供一些额外信息:
我正在使用NSOutlineViewDataSource协议进行实现,以下是相关代码:
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
    return item;
}

- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
    NSMutableDictionary* dict;
    if(item == nil) {
        dict = fileTree;
    } else {
        dict = [((MyFile*) item) children];
    }

    NSArray* keys = [dict allKeys];
    NSArray* sorted = [keys sortedArrayUsingSelector:@selector(compare:)];
    NSString* key = [sorted objectAtIndex:index];
    return [dict objectForKey:key];
}

- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
    return [[item children] count] > 0;
}

- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
    if(item == nil) {
        return [fileTree count];
    }
    return [[item children] count];
}

1
你没有提供任何技术细节。你是在使用Bindings还是NSOutlineViewDataSource协议?如果是前者,请发布你的Bindings的完整描述;如果是后者,请发布你的数据源协议实现的完整代码清单。 - Joshua Nozzi
@Joshua 当然,已经更新了原始帖子。 - Gary
你确定它不会缩进所有可展开的子项,还是只有第二层的子项?如果你有深度嵌套的可展开项呢? - jtbandes
@jtbandes 我已经搜索过了,但还没有找到任何类似的问题及其答案。如果你找到了,请将其作为答案发布。 - Gary
1
尝试将大纲视图从“源”大纲视图更改为普通视图。 - spudwaffle
显示剩余3条评论
2个回答

7

尝试将大纲视图从源码视图更改为普通视图。


1
+1 哇,谢谢你。这个问题让我疯了!我花了一段时间才弄清楚你指的是界面构建器中的高亮样式...但我找到了,所以谢谢。 - regulus6633

0

我刚遇到这个问题,发现尽管距离这篇文章已经过去九年,但问题仍然存在,有点奇怪。

这种行为是嵌入到源样式中的:标准内容的第一行与标题单元格对齐而不是缩进,所以所有内容都向右移了一个级别。

如果您使用标题单元格,则想要这种行为,那么一切正常。 如果您不想使用标题单元格,则不使用SourceList是您唯一的选择。

incorrect indentation without header correctly indented SourceView with header cell


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