【发布时间】:2021-12-22 10:58:53
【问题描述】:
我正在尝试使用已在数组(标志)中定义的图像以编程方式填充列的单元格。
在 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 帖子,似乎我做的一切都是正确的——但显然我搞砸了。
【问题讨论】:
-
你有很多
?.的用法,这只是乞求这样的错误。cellView.imageView?.image =表示“如果这个cellView的imageView是nil,则绝对什么也不做”。好吧,正如您所要求的那样,绝对没有发生任何事情! :) 最好强制展开,因为如果特定单元格没有 imageView,那是由程序中的问题引起的错误,在运行时无法恢复。 -
单元格视图的
imageView出口是否连接到图像视图? -
NSImage(named: flags[row])是否返回图像? -
@Alexander:谢谢!如果我强制展开它肯定会崩溃,这似乎告诉我 cellView 没有 imageView。 (对吗?)不幸的是,我仍然不确定这是为什么。
-
@Willeke:是的,
NSImage(named: flags[row])在别处返回图像。至于你的另一个问题,我不确定——我不这么认为,因为我手动连接的唯一插座是tableView。
标签: swift macos nstableview