我試圖創建使用斯威夫特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
或創建NSTableCellView
以NSTextField
作爲子視圖:
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
屬性?
'使(withIdentifier:所有者:)'加載從NIB細胞視圖。這在文檔中有解釋。 – Willeke
感謝您證明NSTableCellView要求將NSTextField添加爲子視圖。自然,一個NSImageView需要相同的。現在我正在努力做的也是。 – WeakPointer