【发布时间】:2019-05-13 07:06:39
【问题描述】:
我正在尝试在布尔值条件下在表格视图单元格视图中显示图像。
布尔值表示“Book”类的对象的状态,其中初始化了对象:
class Book: NSObject, Codable {
@objc dynamic var author: String
@objc dynamic var title: String
@objc dynamic var lentBy: String
@objc dynamic var available: Bool {
if lentBy == "" {
return true
} else {return false}
}
init(author: String, title: String, lentBy: String) {
self.author = author
self.title = title
self.lentBy = lentBy
}
}
如果未指定字符串lentBy,则布尔值available 返回true:没有人借出这本书,因此它应该是可用的。将 available 对象绑定到表格视图,相应的表格视图单元格显示 1 或 0。而不是 1 或 0,我希望它显示图像:NSStatusAvailable 或 NSStatusUnavailable。
看看这个:https://i.imgur.com/xkp0znT.png。 如果文本字段“Geliehen von”(借出者)为空,则状态为 1,应显示绿色圆圈;否则为红色圆圈。您现在看到的绿色圆圈只是被拖到表格单元格视图中并且不起作用。但这就是想法。
现在我想知道如何显示相应的图像视图而不是 Bool 1 或 0。
表格视图是使用情节提要中的界面构建器构建的。如果我尝试以编程方式对其进行更改,则表格视图中将不再显示任何内容。我想这是由于设置绑定。仅删除最后一列的绑定不起作用。这就是我尝试的方式(没有实现图像视图;我不知道如何以编程方式进行):
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
if tableColumn == tableView.tableColumns[2] {
let cellIdentifier = "statusCellID"
let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: cellIdentifier), owner: self) as? NSTextField
if let cell = cell {
cell.identifier = NSUserInterfaceItemIdentifier(rawValue: cellIdentifier)
cell.stringValue = books[row].lentBy
}
return cell
}
return nil
}
实现这一目标的最佳解决方案是什么?我可以以某种方式而不是 Bool 直接返回相应的,例如lentBys 表示 available 的 CGImage 类型?
【问题讨论】:
标签: macos cocoa swift4 nstableview nsimageview