2017-03-02 79 views
2

我試圖創建使用斯威夫特3. MacOS的桌面應用程序表如何正確地創建一個NSTableCellView與已經動態創建列

我的窗口有兩個基於視圖的表,其中一個表顯示了有效載荷大小的數據包列表。當選擇數據包時,第二個表格顯示有效負載字節。由於有效負載大小不同,第二個表具有以編程方式創建的列;選擇的最大數據包大小決定了最大列數。

我沒有問題,如果我使用基於單元格的表,但我更喜歡使用基於視圖的兩個表。創建

for i in numCols ..< maxCols { 

    let col = NSTableColumn() 
    col.identifier = "Byte\(i)ColumnID" 
    col.headerCell.stringValue = "[\(i)]" 
    tableViewPayload.addTableColumn(col) 

} 

的問題出現在viewFor委託方法,其中

tableView.make(withIdentifier: (tableColumn?.identifier)!, owner: self) as? NSTableCellView 

回報nil

它的工作原理,如果我直接返回NSTextField或創建NSTableCellViewNSTextField作爲子視圖:

let frameRect = NSRect(x: 0, y: 0, width: (tableColumn?.width)!, height: 20)  
let cell = NSTableCellView(frame: frameRect) 
cell.identifier = (tableColumn?.identifier)!  

let textField = NSTextField(frame: cell.frame) 
textField.stringValue = "Test" 
cell.addSubview(textField) 

return cell 

這種方法需要更多樣式的細胞,我應該子類NSTableCellView

我的問題是爲什麼make(withIdentifier:owner:)方法不適用於動態創建的列?我在創建列時錯過了什麼?

有沒有辦法可以創建NSTableCellView並利用textField屬性?

+0

'使(withIdentifier:所有者:)'加載從NIB細胞視圖。這在文檔中有解釋。 – Willeke

+0

感謝您證明NSTableCellView要求將NSTextField添加爲子視圖。自然,一個NSImageView需要相同的。現在我正在努力做的也是。 – WeakPointer

回答

0

我以編程方式構建完整的NSTableViews。假設您詢問NSTableView.makeView方法。我正在使用swift 4.

你知道爲表創建的任何列都被綁定到它,反之亦然?

對於爲表創建的每一列,我請

column.tableView = tableview 
tableview.addTableColumn(column)