我正在尝试使用 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
属性?