NSOutlineView缩进问题

时间:2011-08-08 08:02:45

标签: objective-c cocoa nsoutlineview

我正在使用一个NSOutlineView对象来表示一个文件结构,并发现它不能正确缩进任何可扩展的子节点,尽管它会缩进不可扩展的子节点。

这是一张显示我的意思的图片:

NSOutlineView example

在此示例中,“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];
}

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

我现在遇到了这个问题,发现这篇文章发表九年后,问题仍然存在,这有点奇怪。

这种行为被归类为“源”样式:标准内容的第一行与标题单元格对齐,而不是缩进,因此所有内容都移了一个级别。

如果使用标题单元格,则需要此行为,一切都很好。如果您不想使用标题单元格,则不使用SourceList是唯一的选择。

incorrect indentation without header correctly indented SourceView with header cell