2015-06-15 4 views
2

У меня есть NSTableView, сконфигурированный в Interface Builder, который использует несколько представлений ячейки по умолчанию. Однако представление ячейки первого столбца должно быть создано из пользовательского класса. Как реализовать метод NSTableViewDataSourcetableView.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

Да, я думаю, что другого пути нет. Самый быстрый способ - предоставить столбцам и ячейкам каждый их одинаковый идентификатор, например. 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 вместо согласно вашей логике.