0

每次单击 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两次。

谢谢

4

1 回答 1

1

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

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

于 2012-05-16T15:46:20.517 回答