我是Cocoa的新手,但我是一位经验丰富的程序员(主要是C,C ++,.NET和QT)。我正在努力实现一个源列表,这是您通常在finder和iTunes中看到的侧边栏。我试图使用一个非常基本的测试用例。所以没有CoreData,没有TreeController等......
我实现了NSOutlineViewDataSource。这是我的代码:
@implementation OutlineViewDataSource
- (id)init
{
self = [super init];
if (self) {
header = [[NSString alloc] initWithString: @"Header"];
child1 = [[NSString alloc] initWithString: @"Child 1"];
child2 = [[NSString alloc] initWithString: @"Child 2"];
child3 = [[NSString alloc] initWithString: @"Child 3"];
}
return self;
}
- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item
{
if (item == nil)
{
return header;
}
else
{
if (index == 0)
{
return child1;
}
if (index == 1)
{
return child2;
}
if (index == 2)
{
return child3;
}
}
return nil;
}
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item
{
if (item == nil)
{
return YES;
}
if (item == header)
{
return YES;
}
return NO;
}
- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item
{
if (item == nil)
{
return 1;
}
if (item == header)
{
return 3;
}
return 0;
}
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
{
if (item == nil)
{
return @"";
}
return item;
}
@end
我的xib文件是基本的。它只是一个源列表(这是一个配置为看起来像源列表的NSOutlineView。它还附带了两个预配置的NSTableCellView。我连接了数据源和代理。
如果我运行此代码并将源列表配置为基于单元格,它按预期工作....但显然只显示文本而不是NSTableCellViews。如果我将源列表配置为基于视图,我会得到奇怪的行为。 NSTableCellViews不显示。但是扩展按钮可以,我可以选择正确数量的项目,就像它们在那里一样。也没有文字出现。此外,objectValueForTableColumn函数不会执行。如果我将另一个NSTableCellView添加到xib中的源列表,NSTableCellView会显示,但我无法更改其中的图标或文本,objectValueForTableColumn仍然无法执行。我试图实现viewForTableColumn,但该函数也从未调用过。
我做错了什么。我觉得我很亲密,但我遗漏了一些基本的东西。提前致谢。
答案 0 :(得分:-1)
这是viewForTableColumn未被调用的症状。它确实需要完成它的工作,否则你会得到空白的细胞。我遇到了同样的问题。
您确定您的NSOutlineView的委托是否绑定到任何类实现viewForTableColumn?