【问题标题】:How to prevent NSTableView to call delegate function?如何防止 NSTableView 调用委托函数?
【发布时间】:2017-07-20 17:54:49
【问题描述】:

我有两个 tableviews,tableview1 从 NSArrayController 中获取数据。 Tableview2 从 tableview 委托中获取数据,如下所示:

func tableView(_ tableview2: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {

        if tableview2 == self.tableview2 {

            if let cellView = tableView.make(withIdentifier: (tableColumn?.identifier)!, owner: self) as? NSTableCellView {
               let numbers = array[row]
               if tableColumn?.identifier == "cell" {
                   cellView.textField?.stringValue = "\(numbers.number)"

                   return cellView
               }
            }
        }
        return nil
}

如果我从 tableview1 重新加载数据,上面的 tableview 函数会被调用并返回 nil。所以 tableview1 总是空的。我当然可以删除 tableview1 的委托插座,但我需要它来实现 tableViewSelectionDidChange() 功能。

【问题讨论】:

  • 你到底想做什么?如果重新加载 tableView1,它将调用 viewForTableColumn。如果您不想这样,请不要在 tableView1 上调用 reloadData。如果您返回 nil,您的 tableview1 是如何在屏幕上呈现的?
  • @adev 我没有在 tableview1 上调用 reloadData。 Tableview1 通过 NSArrayController 绑定到一个数组 [NSObejct]。当我更新数组时, tableview1 显示空行。 tableview1 中的行数对应于数组中的项目数。 tableview1 中也有正确的值(我可以在控制台中看到它)。所以 tableview1 填充了正确的行数,甚至是正确的值。但是表格视图中的单元格在视觉上是空的。
  • 你为什么重复问同一个问题?大约 20 小时前,您问了完全相同的问题。
  • @ElTomato 因为有一条评论显然缺少一些代码。所以我重新提出了这个问题。

标签: swift cocoa notifications delegates tableview


【解决方案1】:

为每个表格视图返回一个单元格视图。设置table view 2的控件值。

func tableView(_ tableview2: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
    if let cellView = tableView.make(withIdentifier: (tableColumn?.identifier)!, owner: self) as? NSTableCellView {
        if tableview2 == self.tableview2 {
            if tableColumn?.identifier == "cell" {
                let numbers = array[row]
                cellView.textField?.stringValue = "\(numbers.number)"
            }
        return cellView
    }
    return nil
}

【讨论】:

  • 这个方案的逻辑是不可否认的。我也永远不会来这里。这真的帮助了我很多。谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 2019-09-20
  • 2021-05-31
  • 1970-01-01
相关资源
最近更新 更多