gpt4 book ai didi

cocoa - 轮廓 View :dataCellForTableColumn:item: has strange side effect

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

我有一个大纲 View 委托(delegate),并且正在重写outlineView:dataCellForTableColumn:item: 以使大纲 View 中的单元格变成按钮(请参阅 this question )。这是我的委托(delegate)的代码:

- (NSCell *)outlineView:(NSOutlineView *)outlineView dataCellForTableColumn:(NSTableColumn *)tableColumn item:(id)item;
{
MyCell * myCell = [[MyCell alloc] init];
// return nil;
return myCell;
}

这样做会产生奇怪的副作用。在我的大纲 View 的数据源中,outlineView:objectValueForTableColumn:byItem: 方法始终获取 tableColumn 的空值。

代码是:

- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
{
printf("tableColumn:%s\ttable identifier: %s\n", [[tableColumn className] cString], [[tableColumn identifier] cString]);
return [item valueForKey:[tableColumn identifier]];
}

输出是:

tableColumn:(null)  table identifier: (null)

奇怪的是,只有当我实现outlineView:dataCellForTableColumn:item:方法时才会发生这种情况。我在这里缺少什么?

编辑:

像这样修改委托(delegate)函数似乎可以解决问题:

- (NSCell *)outlineView:(NSOutlineView *)outlineView dataCellForTableColumn:(NSTableColumn *)tableColumn item:(id)item;
{
printf("delegate column identifier: %s\n", [[tableColumn identifier] cStringUsingEncoding:NSASCIIStringEncoding]);
if (tableColumn == nil)
{
return nil;
}
MyCell * aCustomCell = [[MyCell alloc] init];
return aCustomCell;
}

但是,我不太明白这是怎么回事。如果有人可以解释,那会很有帮助。谢谢!

最佳答案

NSOutlineView 能够让您使用单个单元格绘制整行,而不是为每列绘制单独的单元格。它首先要求一个单元格传入一个 nil 表列。如果您为该调用返回一个单元格,它将使用它来绘制整行,否则它会继续并为每列请求一个单独的单元格。因此,正如您所发现的,解决方案是在传递 nil 表列时返回一个 nil 单元格,这样事情就会正常绘制。

关于cocoa - 轮廓 View :dataCellForTableColumn:item: has strange side effect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/499933/

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