Я пытаюсь отобразить изображение в виде ячейки табличного представления при условии логического значения.
Логическое значение представляет собой представление состояния объекта класса «Книга», в котором объекты инициализируются:
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
не указана, Boolavailable
возвращает истину: никто не одолжил книгу и, следовательно, она должна быть доступна.Привязывая объект 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 напрямую вернуть соответствующие, например, типы CGImage для lentBy
s представления available
?