NSTableView显示空白视图或占位符“Table View Cell”问题求助
问题分析与解决
核心问题是混淆了Cell Based和View Based表格的数据源/代理方法:
tableView(_:objectValueFor:row:)是Cell Based表格模式下的数据源方法,用于返回单元格的文本值。- 而你使用的是View Based模式,需要通过NSTableViewDelegate的
tableView(_:viewFor:row:)方法来返回自定义的单元格视图。
修正步骤:
让SidebarController实现NSTableViewDelegate协议
在extension声明里补充协议:extension SidebarController: NSTableViewDataSource, NSTableViewDelegate { // ... 原有代码 }替换数据源方法为代理方法
删除原来的tableView(_:objectValueFor:row:),替换成以下方法:func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? { 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的Delegate已关联
- 在Interface Builder中,将TableView的delegate连线到SidebarController;
- 或者在代码中(比如
viewDidLoad方法内)添加:tableView.delegate = self
额外说明:
你提到的NSTableColumn中预创建的Text Cell,在View Based模式下不会被调用,所以即使无法删除也不影响自定义单元格视图的显示。
内容的提问来源于stack exchange,提问作者f1nn
相关产品推荐
相关产品推荐

