繁体   English   中英

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

[英]How do I access an ImageView within an NSTableCellView in Swift?

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

在 IB 中,我在表格单元格视图中直接有一个图像视图。 在 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 中设置的默认图像——或者如果我将其删除,则什么都没有。

根据我浏览过的教程和 StackOverflow 帖子,似乎我做的一切都是正确的——但显然我搞砸了一些事情。

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

请注意图像视图(在单元格中)没有被任何内容引用(其右侧的“引用插座”部分为空)。

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

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

……但这显然很笨拙。

相反,您应该选择您的单元格,然后从其imageView出口拖到 Image View。 这将创建一个新的引用,这将使cell.imageView非零。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM