NSTableView 显示空视图或占位符“Table View Cell”

问题描述 投票:0回答:1

我正在尝试在 NSTableView 中显示静态单元格视图列表。

我做了什么:

  1. 向 NSTableColumn 添加标识符 (
    Note
    )
  2. 从带有标识符的对象库添加 NSTableCellView
    idNode
  3. 在 NSTableColumn (
    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
是:

  1. 没有错误或短暂退出发生
  2. 返回一个有效的
    cellView
    (至少看起来是这样)

但我得到:

我做错了什么?

仅供参考,如果我删除 NSTableCellView 的标识符,我只会得到 Table Cell View 占位符。

swift cocoa nstableview nstablecellview
1个回答
0
投票

问题是我使用了错误的重载函数。正确的是:

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 声明是不够的。

所以,赶上:

  1. 没有 NSTableViewDelegate
  2. 无法使用正确的功能
  3. 无论如何都调用了不正确的,所以我没有注意到这个问题
© www.soinside.com 2019 - 2024. All rights reserved.