如何在 Swift 中访问 NSTableCellView 中的 ImageView?

How do I access an ImageView within an NSTableCellView in Swift?

我正在尝试以编程方式使用已在数组(标志)中定义的图像填充列的单元格。

在 IB 中,我在 Table 单元格视图中直接有一个图像视图。在 ViewController 这就是我正在做的事情:

   public func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
      
      guard let cellView = tableView.makeView(withIdentifier: tableColumn!.identifier, owner: self) as? NSTableCellView else { return nil }
      
      if tableColumn?.title == "flag" {
         cellView.imageView?.image = NSImage(named: flags[row])   // NOT WORKING
      } else if tableColumn?.title == "country" {
         cellView.textField?.stringValue = flags[row].uppercased()
      }
      
      return cellView
   }

这会导致“国家”列中的文本字段单元格设置正常,但“标志”列中的每个单元格都具有我在 IB 中设置的默认图像——或者如果我采用它则什么都没有出。

根据我浏览过的教程和 Whosebug 帖子,似乎我做的每件事都是正确的——但显然我搞砸了一些东西。

(回应评论中分享的截屏)

注意 Image View(在单元格中)没有被任何东西引用(它右侧的“引用出口”部分是空的)。

您的图像视图是其单元格的子视图(如其在左侧栏视图层次结构中的位置所示),因此您大概可以使用类似以下内容访问它:

let imageView = cell.subViews.first(where: { [=10=] is NSImageView }) as! NSImageView
imageView.image = NSImage(named: flags[row])

...但这显然很笨拙。

相反,您应该 select 您的单元格,并从其 imageView 出口拖动到图像视图。这将创建一个新的引用,这将使 cell.imageView 非零。

或者,我建议您只删除您的单元格,然后从“对象库”的“图像和测试 Table 单元格视图”创建一个新单元格。它已经连接了所有插座。