簡體   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