【发布时间】:2011-08-08 08:02:45
【问题描述】:
我正在使用 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];
}
【问题讨论】:
-
您没有提供任何技术细节。您使用的是 Bindings 还是 NSOutlineViewDataSource 协议?如果是前者,请发布您的绑定的完整描述;如果是后者,请发布您的数据源协议实现的完整代码清单。
-
@Joshua 确定,更新了原帖
-
您确定它不会缩进 all 可扩展的子级,还是仅缩进第二级的子级?如果您有深度嵌套的可扩展项目怎么办?
-
@jtbandes:好点。再次检查后,似乎可扩展项总是比缩进应低 1 级。在检查另一个级别时,我注意到它缩进了 1 级,而应该是 2 级。
-
尝试将大纲视图从 Source 大纲视图更改为普通视图。
标签: objective-c cocoa nsoutlineview