gpt4 book ai didi

cocoa - 使用 NSOutlineView 和 NSTableCellView 实现基本的源列表

转载 作者:行者123 更新时间:2023-12-03 16:15:59 24 4
gpt4 key购买 nike

我是 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。我连接了数据源和委托(delegate)。

如果我将源列表配置为基于单元格来运行此代码,它会按预期工作......但显然只显示文本,而不显示 NSTableCellViews。如果我将源列表配置为基于 View ,则会出现奇怪的行为。 NSTableCellViews 不显示。但扩展按钮可以,我可以选择正确数量的项目,就好像它们在那里一样。也没有显示任何文字。此外,objectValueForTableColumn 函数不会执行。如果我将另一个 NSTableCellView 添加到 xib 中的源列表中,则会显示 NSTableCellView,但我无法更改其中的图标或文本,objectValueForTableColumn 仍然不会执行。我尝试实现 viewForTableColumn,但该函数也从未被调用。

我做错了什么。我觉得我已经很接近了,但我缺少一些基本的东西。提前致谢。

最佳答案

这是 viewForTableColumn 未被调用的症状。它确实需要完成它的工作,否则你会得到空白单元格。我遇到了完全相同的问题。

确定您的 NSOutlineView 委托(delegate)已绑定(bind)到实现 viewForTableColumn 的任何类吗?

关于cocoa - 使用 NSOutlineView 和 NSTableCellView 实现基本的源列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7086847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com