我正在尝试使用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
或创建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
属性?
答案 0 :(得分:0)
我以编程方式构建完整的NSTableViews。假设您询问NSTableView.makeView方法。我使用swift 4。
您知道为表创建的任何列都绑定到它,反之亦然?
对于为表创建的每个列,我调用
column.tableView = tableview
tableview.addTableColumn(column)