2015-06-15 68 views
2

我有一個NSTableView在Interface Builder中配置,它使用了幾個默認的單元格視圖。然而,第一列的單元格視圖需要從自定義類創建。如何實施NSTableViewDataSource方法tableView.viewForTableColumn(),以便爲其餘列創建默認的單元格視圖?如何讓NSTableView使用與預設單元格視圖混合的自定義單元格視圖?

這裏是我的方法至今:

func tableView(tableView:NSTableView, viewForTableColumn tableColumn:NSTableColumn?, row:Int) -> NSView? 
{ 
    /* Create custom cell view for first column. */ 
    if (tableColumn?.identifier == "nameColumn") 
    { 
     let view = tableView.makeViewWithIdentifier("nameCellView", owner: nil) as! NameTableCellView; 
     return view; 
    } 

    /* Return default cell views (defined in IB) for the rest. */ 
    return tableView.viewAtColumn(??, row: row, makeIfNecessary: true); // How to get column index?? 
} 

如何獲得tableView.viewAtColumn()右列的索引?在這種情況下,tableView.columnForView()tableView.columnWithIdentifier()顯然不是任何選項。

回答

0

我想嘗試只給了默認的單元格在Interface Builder自己的標識...

enter image description here

...然後就使用結合makeViewWithIdentifier:

func tableView(tableView: NSTableView, 
    viewForTableColumn 
    tableColumn: NSTableColumn?, row: Int) -> NSView? { 

     var viewIdentifier = "StandardTableCellView" 

     if let column = tableColumn { 

      switch column.identifier { 

      case "nameColumn": 
       viewIdentifier = "nameCellView" 

      default: break 

      } 
     } 

     return tableView.makeViewWithIdentifier(viewIdentifier, owner: self) as? NSView 
} 
+0

是的,我想沒有其他辦法。最快的是給列和單元格各自的相同ID,例如0,1,2,3 ...等,然後創建指定了列標識符的單元格。 – BadmintonCat

0

我遇到了一個很好的解決方案:您可以使表列標識符與相應的視圖單元格標識符相同。在這之後,你可以在您的代理使用:

- (NSView *)tableView:(NSTableView *)tableView 
    viewForTableColumn:(NSTableColumn *)tableColumn 
        row:(NSInteger)row { 

    NSTableCellView *cell = [tableView makeViewWithIdentifier:[tableColumn identifier] owner:NULL]; 


    return cell; 
} 

以此爲起點,您可以輕鬆地爲特定的列標識符行動,再拍cellview,而不是按照你的邏輯。

相關問題