2

我正在尝试使用 Swift 3 为 macOS 创建桌面应用程序。

我的窗口有两个基于视图的表,其中一个表显示具有有效负载大小的数据包列表。选择数据包时,第二个表显示有效负载字节。由于有效负载大小不同,第二个表具有以编程方式创建的列;选择的最大数据包大小确定最大列数。

如果我使用基于单元格的表格,我没有问题,但我更喜欢对两个表格都使用基于视图的表格。

列已创建

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直接返回 a 或NSTableCellView使用 aNSTextField作为子视图创建 a ,它将起作用:

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属性?

4

1 回答 1

0

我以编程方式构建整个 NSTableViews。假设您正在询问 NSTableView.makeView 方法。我正在使用 swift 4。

您知道您为表创建的任何列都会绑定到它,反之亦然?

对于为表创建的每一列,我调用

column.tableView = tableview
tableview.addTableColumn(column)
于 2017-11-20T21:24:58.937 回答