【发布时间】:2018-12-05 06:17:11
【问题描述】:
我正在尝试在我的 Cocoa 应用程序中从头开始构建一个没有界面构建器的表格视图,但我的 viewForTableColumn 方法拒绝被调用。
我的表格视图是使用此代码创建的。
let tableView: NSTableView = {
let table = NSTableView(frame: .zero)
table.headerView = nil
table.addTableColumn(NSTableColumn(identifier: .column))
return table
}()
我也有这个NSUserInterfaceItemIdentifier 类的扩展
extension NSUserInterfaceItemIdentifier {
static let cell = NSUserInterfaceItemIdentifier("cell")
static let column = NSUserInterfaceItemIdentifier("column")
}
我的视图控制器正在实现NSTableViewDataSource 和NSTableViewDelegate,它们是在viewDidLoad 方法中设置的。表格视图也变成了滚动视图。
let scrollView = NSScrollView()
override func viewDidLoad() {
self.scrollView.documentView = self.tableView
self.scrollView.hasVerticalScroller = true
self.view.addSubview(self.scrollView)
self.tableView.delegate = self
self.tableView.dataSource = self
self.tableView.reloadData() // To make sure the method would be called.
}
numberOfRows 方法返回的值大于0 并被执行。
根据我的理解,应该使用从 0 到 numberOfRows 返回的值的行参数调用以下方法,但它永远不会被调用。
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
guard let view = self.tableView.makeView(withIdentifier: .cell, owner: self) as? NSTableCellView else {
return nil
}
// set the text/font for the view
return view
}
我也尝试过使用dataCellFor 和rowViewForRow,但它们都没有被调用。
编辑:
我检查了元素的框架以确保表格视图和行可见。
【问题讨论】:
-
一个不可见的表格视图不请求视图。
scrollView的框架是什么? -
框架设置为窗口大小,设置背景色为红色确认可见。
-
table view的frame和column的宽度也ok吗?如果捕获视图层次结构,表格视图是否可见?
-
我添加了视图层次结构的图片,蓝色视图是
scrollView,红色是tableView -
我尝试了您的代码(添加了
self.scrollView.frame = self.view.bounds和numberOfRowsInTableView)并调用了viewForTableColumn。它返回nil。
标签: swift cocoa swift4 nstableview nstableviewcell