每次点击我的NSOutlineView的一行时都会调用此方法。我认为应该为每个列行调用一次以创建单元格:
- (NSCell *)outlineView:(NSOutlineView *)outlineView dataCellForTableColumn:(NSTableColumn *)tableColumn item:(id)item
{
if ([[tableColumn identifier] isEqualToString:@"title"]) {
CBImageTextCell *cell = [[CBImageTextCell alloc] init];
...
return [cell autorelease];
}
}
因此,我是否正在初始化超过必要的细胞?
我正在深入研究这段代码的原因是当我点击一个单元格时,会调用 hitTestForEvent 两次。
由于
答案 0 :(得分:1)
只要大纲视图需要单元格,就会被调用。大纲视图不一定存储单元格。当然,它不会为每个列行存储一个单元格。表和大纲视图存储很少。他们每次需要时都会从数据源获取内容,并且每次都会向代表或列询问单元格等。
如果单元格始终属于同一个类,则应该只将该类的实例设置为列的单元格,而不是实现此委托方法。您可以在IB或代码中进行设置。如果您只需要调整每行的单元格,请改为实现-outlineView:willDisplayCell:forTableColumn:item:
。