gpt4 book ai didi

macos - 在 Swift 中有条件地在 TableView 中显示 ImageView

转载 作者:行者123 更新时间:2023-12-03 17:09:01 24 4
gpt4 key购买 nike

我试图在 bool 值的条件下在 TableView 单元格 View 中显示图像。

bool 值是“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,则 Bool available 返回 true:没有人借出这本书,因此它应该可用。将 available 对象绑定(bind)到 TableView ,相应的 TableView 单元格显示 1 或 0。我希望它显示图像: NSStatusAvailableNSStatusUnavailable

看看这个:/image/fbsjO.png 。如果文本字段“Geliehen von”(借出者)为空,则状态为 1,并且应显示绿色圆圈;否则为红色圆圈。您现在看到的绿色圆圈只是被拖到表格单元格 View 中,并且不起作用。但这就是想法。

现在我想知道如何显示相应的 ImageView 而不是 Bool 1 或 0。

表格 View 是使用 Storyboard中的界面构建器构建的。如果我尝试以编程方式对其进行更改, TableView 中将不再显示任何内容。我想这是由于设置的绑定(bind)造成的。仅删除最后一列的绑定(bind)是行不通的。这就是我尝试的方法(没有实现 ImageView ;我不知道如何以编程方式执行此操作):

    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 直接返回相应的值吗? lentBy 表示的 CGImage 类型可用

最佳答案

您正在使用 Cocoa Bindings。这使得事情变得非常容易。

  • 在 Interface Builder 中,将带有 ImageView 的 NSTableCellView 拖拽至最后一列并删除当前列。
  • 删除文本字段并为 ImageView 设置适当的约束。
  • 而不是 viewForColumn:Row 实现

    func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
    return books[row]
    }
  • 使用由 KVO 驱动的 image 属性扩展模型

    class Book: NSObject, Codable {
    @objc dynamic var author: String
    @objc dynamic var title: String
    @objc dynamic var lentBy: String

    @objc dynamic var available: Bool {
    return lentBy.isEmpty
    }

    @objc dynamic var image: NSImage {
    return NSImage(named: (lentBy.isEmpty) ? NSImage.statusAvailableName : NSImage.statusUnavailableName)!
    }

    static func keyPathsForValuesAffectingImage() -> Set<String> { return ["lentBy"] }

    init(author: String, title: String, lentBy: String) {
    self.author = author
    self.title = title
    self.lentBy = lentBy

    }
    }
  • 在 Interface Builder 中将表格单元格 View 的 ImageView 的 Value 绑定(bind)到 Table Cell View > objectValue.image

关于macos - 在 Swift 中有条件地在 TableView 中显示 ImageView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56107268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com