如何在 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 单元格视图”创建一个新单元格。它已经连接了所有插座。
我正在尝试以编程方式使用已在数组(标志)中定义的图像填充列的单元格。
在 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 单元格视图”创建一个新单元格。它已经连接了所有插座。