outlineView:dataCellForTableColumn:tableColumn被调用超过必要的?

时间:2012-05-16 14:48:43

标签: objective-c cocoa

每次点击我的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 两次。

由于

1 个答案:

答案 0 :(得分:1)

只要大纲视图需要单元格,就会被调用。大纲视图不一定存储单元格。当然,它不会为每个列行存储一个单元格。表和大纲视图存储很少。他们每次需要时都会从数据源获取内容,并且每次都会向代表或列询问单元格等。

如果单元格始终属于同一个类,则应该只将该类的实例设置为列的单元格,而不是实现此委托方法。您可以在IB或代码中进行设置。如果您只需要调整每行的单元格,请改为实现-outlineView:willDisplayCell:forTableColumn:item: