gpt4 book ai didi

objective-c - 大纲 View :objectValueForTableColumn:byItem: not called

转载 作者:太空狗 更新时间:2023-10-30 03:52:47 26 4
gpt4 key购买 nike

我正在尝试为新程序创建源列表,但在使用基于 View 的 NSOutlineView 时遇到了一些小问题。我的代码使用基于单元格的 NSOutlineView 工作正常,所以我对发生的事情有点困惑。

这是我的委托(delegate)和数据源代码:

#pragma mark -
#pragma mark NSOutlineView Delegate

- (BOOL)outlineView:(NSOutlineView *)outlineView isGroupItem:(id)item {
return (item == nil) ? YES : [(SourceListNode *)item groupItem];
}

- (id)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
if ([(SourceListNode *)item groupItem]) {
return [outlineView makeViewWithIdentifier:@"HeaderCell" owner:self];
}
else {
return [outlineView makeViewWithIdentifier:@"DataCell" owner:self];
}
}

#pragma mark -
#pragma mark NSOutlineView Data Source

- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
return (item == nil) ? [sourceListNodes count] : [(SourceListNode *)item numberOfChildren];
}

- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
return (item == nil) ? YES : ([(SourceListNode *)item numberOfChildren] > 0);
}

- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
return (item == nil) ? [sourceListNodes objectAtIndex:index] : [(SourceListNode *)item childAtIndex:index];
}

- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
return [(SourceListNode *)item name];
}

当我通过调试器运行它时,它看到 outlineView:objectValueForTableColumn:byItem: 没有执行。结果是没有文本的大纲 View 。创建了正确的单元格,我可以选择它们并展开它们。我错过了什么?

更新:我删除了 IB 中的源列表,添加了一个新列表,并将其连接到我的 Controller 对象。结果更好,但标题单元格的文本为“HEADER CELL”,子单元格的文本为“Table View Cell”。

我再次通过调试器运行程序,这次执行了 outlineView:objectValueForTableColumn:byItem:。但是它没有填充单元格的文本。

然后我更新了 outlineView:viewForTableColumn:item: 如下:

- (id)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
NSTableCellView *result;
if ([(SourceListNode *)item groupItem]) {
result = [outlineView makeViewWithIdentifier:@"HeaderCell" owner:self];
}
else {
result = [outlineView makeViewWithIdentifier:@"DataCell" owner:self];
}

[[result textField] setStringValue:[(SourceListNode *)item name]];

return result;
}

现在一切正常。

简而言之,我已经解决了我的问题。但是,我现在有另一个问题。 outlineView:objectValueForTableColumn:byItem: 用于基于 View 的大纲 View 的目的是什么?它执行,但似乎没有做任何事情。

最佳答案

基于 View 与基于单元格略有不同。

所有不同之处在于将“id”返回值替换为“NSView”。

改变这个:

- (id)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item

对此:

- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item

假设您正在运行 10.7,并且您实际上打算返回一个 NSView。

关于objective-c - 大纲 View :objectValueForTableColumn:byItem: not called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8763417/

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