如何在NSTableView Mac中动态设置数据?

时间:2019-06-12 09:52:15

标签: swift macos nstableview

我正在尝试创建具有动态内容,行和列的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 ""
}

如何解决此问题?

0 个答案:

没有答案