Ria*_*inn 5 cocoa nsoutlineview
我是 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
Run Code Online (Sandbox Code Playgroud)
我的 xib 文件是基本的。它只是一个源列表(这是一个配置为看起来像源列表的 NSOutlineView。它还带有两个预配置的 NSTableCellView。我连接了数据源和委托。
如果我使用配置为基于单元格的源列表运行此代码,它会按预期工作......但显然只显示文本而不是 NSTableCellViews。如果我将源列表配置为基于视图,则会出现奇怪的行为。NSTableCellViews 不显示。但是扩展按钮可以,我可以选择正确数量的项目,就好像它们在那里一样。也没有文字显示。此外,objectValueForTableColumn 函数不会执行。如果我将另一个 NSTableCellView 添加到 xib 中的源列表中,NSTableCellView 会出现,但我无法更改其中的图标或文本,objectValueForTableColumn 仍然不会执行。我试图实现 viewForTableColumn,但该函数也从未调用过。
我究竟做错了什么。我觉得我很接近,但我缺少一些基本的东西。提前致谢。
jjs*_*jjs -1
这是 viewForTableColumn 未被调用的症状。它确实需要完成它的工作,否则你会得到空白单元格。我有同样的问题。
您确定您的 NSOutlineView 的委托绑定到任何实现 viewForTableColumn 的类吗?
| 归档时间: |
|
| 查看次数: |
2208 次 |
| 最近记录: |