2011-10-09 17 views
1

我無法完全理解使用OutlineView時可以返回單元格的所有不同位置。據我可以告訴有四個地方:瞭解OutlineView中不同方法的相關性

NSOutlineViewDataSource有:

  • outlineView:child
  • outlineView:objectValueForDataColumn

而且NSOutlineViewDelegate有:

  • outlineView:willDisplayCell
  • outlineView:dataCellForTableColumn

如果我有不同的項目一個大綱視圖,就像SOURCELIST例子,我在哪裏做什麼,爲什麼?我有GroupItem標題和一個IconAndImage單元格樹,其子類NSTextFieldCell。在哪裏應該實例化,我應該在哪裏設置樣式,圖像和標題?

回答

1

可可意味着單詞單元格的含義與您在Excel中調用單元格的內容不同。

在可可中,一個細胞是一個NSCell小類,可以認爲是輕量級可重用的NSView。它用於以相同的方式繪製多個項目。例如。

- (void)drawRect:(NSRect)draw_rect { 
    // ... 
    for (id value in myDataArray) { 
     [cell setObjectValue:value]; 
     NSRect cellFrame = ...; 
     [cell drawWithFrame:cellFrame inView:self]; 
    } 

所以一個數據源不返回細胞,而是返回的參數[(NSCell) -(void)setObjectValue:(id)value]對象。委託返回哪個單元對象用於每個項目,並且應該實現,以便您只創建一次每個單元類型。例如。

- (NSCell *)outlineView:(NSOutlineView *)outlineView 
dataCellForTableColumn:(NSTableColumn *)tableColumn 
        item:(id)item { 
    NSCell *cell = nil; 
    switch(tableColumn.tag) { 
     case 0: 
      if (! myCell) { 
        myCell = [[NSCell alloc] init]; 
      } 
      cell = myCell; 
      break; 
     default: 
      break; 
    } 
    return cell; 
} 

您應該使用表列標記或類似的功能來處理用戶的列重新排序。