You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NSTableView显示空白视图或占位符“Table View Cell”问题求助

问题分析与解决

核心问题是混淆了Cell Based和View Based表格的数据源/代理方法:

  • tableView(_:objectValueFor:row:)是Cell Based表格模式下的数据源方法,用于返回单元格的文本值。
  • 而你使用的是View Based模式,需要通过NSTableViewDelegate的tableView(_:viewFor:row:)方法来返回自定义的单元格视图。

修正步骤:

  1. 让SidebarController实现NSTableViewDelegate协议
    在extension声明里补充协议:

    extension SidebarController: NSTableViewDataSource, NSTableViewDelegate {
        // ... 原有代码
    }
    
  2. 替换数据源方法为代理方法
    删除原来的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
    }
    
  3. 确保TableView的Delegate已关联

    • 在Interface Builder中,将TableView的delegate连线到SidebarController;
    • 或者在代码中(比如viewDidLoad方法内)添加:
      tableView.delegate = self
      

额外说明:

你提到的NSTableColumn中预创建的Text Cell,在View Based模式下不会被调用,所以即使无法删除也不影响自定义单元格视图的显示。

内容的提问来源于stack exchange,提问作者f1nn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 01:27:09