gpt4 book ai didi

ios - Swift didSet on UICollectionViewCell 属性运行,但不更新 UI

转载 作者:行者123 更新时间:2023-11-29 10:20:48 25 4
gpt4 key购买 nike

我有一个自定义的 UICollectionViewCell,它会根据选择事件更改其外观,并且应该也更改其外观以响应其他属性更改,但事实并非如此.

class NumberCell: UICollectionViewCell {
let numberLabel = UILabel()

override var selected: Bool {
didSet {
// Updates as expected
contentView.backgroundColor = self.selected ? UIColor.redColor() : UIColor.clearColor()
}
}

var number: Int? {
didSet {
// Sets and shows the text in the number label as expected when cell is first initialised
if let number = number {
numberLabel.text = String(number)
}
}
}

var isCrossedOut: Bool = false {
didSet {
// Sets and displays correct values on initialisation, but later
// stops updating display
contentView.backgroundColor = self.isCrossedOut ? UIColor.blackColor() : UIColor.clearColor()
}
}

// ...
}

单元格的选定状态会很好地更新,但是每当我执行 cell.isCrossedOut = true 时,我都可以看到代码正在运行,但我看不到背景颜色实际上发生了变化,即使它似乎使用与选择属性观察器完全相同的逻辑。

我可以通过执行 collectionView.reloadData()(重新加载整个 Collection View 是 Not Acceptable )或 collectionView.reloadItemsAtIndexPaths([...])(我想或多或少可以接受),但我真的更愿意动态更新 UI。

编辑

这就是我更新划掉的属性的方式:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
if shouldBeCrossedOut(indexPath) {
let cell = self.collectionView(collectionView, cellForItemAtIndexPath: indexPath) as! NumberCell
cell.isCrossedOut = true
}
}

最佳答案

替换:

self.collectionView(collectionView, cellForItemAtIndexPath: indexPath) as! NumberCell

与:

self.collectionView?.cellForItemAtIndexPath(NSIndexPath(forItem: 0, inSection: 0)) as! NumberCell

self.collectionView(collectionView, cellForItemAtIndexPath: indexPath) 作为! NumberCell 是您重写的数据源方法,用于为 Collection View 提供一个单元格(即,它将始终返回一个新实例化或新出列的单元格,因此当前不在屏幕上)。 self.collectionView?.cellForItemAtIndexPath(NSIndexPath(forItem: 0, inSection: 0)) 作为! NumberCell 是一个实例方法,它将返回对给定索引路径处的当前单元格的引用。 Storyboard与此问题无关。您可以在没有任何 IB 的情况下使用有效代码查看 playground 的代码 here .

关于ios - Swift didSet on UICollectionViewCell 属性运行,但不更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35383077/

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