我遇到了自定义UICollectionViewCell
的问题,我可以在重新加载集合视图时快速查看来自上一个单元格的数据。然而,细胞最终会得到正确的数据。
我的自定义单元格有一个UIButton
,我在func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {}
委托方法中设置了标题。
我尝试过,例如:cell.myButton.setTitle("", for: .normal)
在设置我想要使用的实际标题之前,“清除”在集合视图中为每个项目设置的上一个值。
任何可能导致此问题的想法?
提前感谢您的帮助!
答案 0 :(得分:1)
虽然你已经想出了将按钮类型设置为custom
的工作(但我不确定它是如何解决你的问题的),只是想让你知道cellForRowAtIndexPath
不是清洁已装载的牢房的好地方。
如果你有自定义单元格,那么你应该考虑覆盖prepareForReuse()
并在重复使用之前清除单元格。
override func prepareForReuse() {
//clear your cell here
}
答案 1 :(得分:0)
当您没有正确设置数据时,通常会发生此问题。如下例所示,字母数组用于填充集合视图数据。在cellForItemAt方法中,我们仅在字母表等于A时设置按钮标题。这会导致闪烁问题,因为当单元格不等于" A&#34时我们没有处理这种情况。 ;。要修复它,我们需要处理不等于A的条件。
let alphabets = ["A", "C", "A", "D", "E"]
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellIdentifier", for: indexPath)
let alphabet = alphabets[index.row]
if alphabet == "A" {
cell.myButton.setTitle("Success", for: .normal)
}
// To fix it, handle the case when alphabet is not equal to "A"
else {
cell.myButton.setTitle("", for: .normal)
}
return cell
}