我正在尝试在 NSTableView 中显示静态单元格视图列表。
我做了什么:
Note
)idNode
Note
) 中留下预先创建的文本单元格,因为我无法删除它表格视图内容模式——View Based.
这是我的代码:
extension SidebarController: NSTableViewDataSource {
func numberOfRows(in tableView: NSTableView) -> Int {
return 1;
}
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
let cellIdentifier = NSUserInterfaceItemIdentifier(rawValue: "idNote")
guard let cellView = tableView.makeView(withIdentifier: cellIdentifier, owner: self) as? NSTableCellView else {
NSLog("Cant create cell view for row \(row)!")
return nil
}
cellView.textField!.stringValue = "Hello, world!"
return cellView
}
}
tableView
是:
cellView
(至少看起来是这样)但我得到:
我做错了什么?
仅供参考,如果我删除 NSTableCellView 的标识符,我只会得到 Table Cell View 占位符。
问题是我使用了错误的重载函数。正确的是:
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let cellIdentifier = NSUserInterfaceItemIdentifier(rawValue: "Note")
guard let cellView = tableView.makeView(withIdentifier: cellIdentifier, owner: self) as? NSTableCellView else {
NSLog("Cant create cell view for row \(row)!")
return nil
}
cellView.textField!.stringValue = "Hello, world!"
return cellView
}
所以,注意区别:
_ tableView: NSTableView, viewFor tableColumn
Xcode 不允许我使用它的原因——扩展定义中没有
NSTableViewDelegate
。
这个函数向 NSTableViewDelegate 确认。只有 NSTableViewDataSource 声明是不够的。
所以,赶上: