我正在尝试创建具有动态内容,行和列的NSTableView。 我正在使用
这样的数据数组动态创建列private func addHeader() {
self.dbTableView.tableColumns.forEach { self.dbTableView.removeTableColumn($0)}
for column in table!.columnNames {
let tableColumn = NSTableColumn()
tableColumn.headerCell.title = column
tableColumn.headerCell.alignment = .center
tableColumn.identifier = NSUserInterfaceItemIdentifier(rawValue: column)
self.dbTableView.addTableColumn(tableColumn)
}
}
我已经重写了委托方法
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
guard let vw = tableView.makeView(withIdentifier: tableColumn!.identifier, owner: self) as? NSTableCellView else { return nil }
for i in 0..<table!.columnCount {
let columnName = table?.columnNames[i]
let data = table?.rows[row][i]
if tableColumn!.identifier.rawValue == columnName {
vw.textField?.stringValue = data ?? ""
}
}
return vw
}
但是makeView(withIdentifier:, owner:)
总是返回nil
。
我已经尝试过以下代表,但没有成功。
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
for i in 0..<table!.columnCount {
let columnName = table?.columnNames[i]
let data = table?.rows[row][i]
if tableColumn!.identifier.rawValue == columnName {
return data
}
}
return ""
}
如何解决此问题?