首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSCollectionViewItem中正在重置的变量

NSCollectionViewItem中正在重置的变量
EN

Stack Overflow用户
提问于 2020-06-04 08:01:29
回答 1查看 122关注 0票数 0

我正在尝试从父NSTextField更新NSCollectionViewItem中的一个NSCollectionViewDataSource标题。这是我的密码。

NSCollectionViewDataSource

代码语言:javascript
复制
    func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
        let cell = collectionView.makeItem(
          withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "MacDeviceItem"),
          for: indexPath
        ) as! MacDeviceItem

        let device = devicesList[indexPath.item]
        cell.deviceName = "Hello World"
        return cell
    }

NSCollectionViewItem

代码语言:javascript
复制
class MacDeviceItem: NSCollectionViewItem {
    dynamic public var deviceName:String = "Unknown Device Name"

    @IBOutlet weak var deviceImage: NSImageView!
    @IBOutlet weak var deviceNameLabel: NSTextField!
    @IBOutlet weak var deviceStatusLabel: NSTextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        view.wantsLayer = true
        updateSelection()
    }

    override func viewDidLayout() {
        super.viewDidLayout()
        view.layer?.cornerRadius = 7
        print(deviceName)
    }

    override func viewDidAppear() {
        self.deviceNameLabel?.stringValue = deviceName
    }

    private var selectionColor : CGColor {
        let selectionColor : NSColor = (isSelected ? .controlAccentColor : .clear)
        return selectionColor.cgColor
    }

    private var selectionTextColor : NSColor {
        let selectionTextColor : NSColor = (isSelected ? .selectedMenuItemTextColor : .controlTextColor)
        return selectionTextColor
    }

    override var isSelected: Bool {
        didSet {
            super.isSelected = isSelected
            updateSelection()
            // Do other stuff if needed
        }
    }

    override func prepareForReuse() {
        super.prepareForReuse()
        updateSelection()
    }

    private func updateSelection() {
        view.layer?.backgroundColor = self.selectionColor
        deviceNameLabel?.textColor = self.selectionTextColor
        deviceStatusLabel?.textColor = self.selectionTextColor
    }

}

如果我将deviceName的值打印在viewDidLoad上,那么这个值就是存在的。但是,当尝试在ViewDidAppear中设置标签时,否则什么都不会发生,并且变量已被重置为默认值。我是斯威夫特的新手,但以前在目标C方面有过一些经验,但不记得有过这个问题。

EN

回答 1

Stack Overflow用户

发布于 2020-06-04 08:57:08

在这里,实际上不需要变量deviceName: String。您可以直接将值设置为deviceNameLabel: NSTextField,如下所示:

代码语言:javascript
复制
cell.deviceNameLabel.stringValue = "Hello World"

如果实际需要变量,可以尝试使用didSet方法,如下所示:

代码语言:javascript
复制
public var deviceName:String = "Unknown Device Name" {
    didSet {
        cell.deviceNameLabel.stringValue = deviceName
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62189667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档