UICollectionViewCell在设置值时快速显示前一个单元格的数据

时间:2017-05-30 00:51:07

标签: ios swift uicollectionview uicollectionviewcell

我遇到了自定义UICollectionViewCell的问题,我可以在重新加载集合视图时快速查看来自上一个单元格的数据。然而,细胞最终会得到正确的数据。

我的自定义单元格有一个UIButton,我在func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {}委托方法中设置了标题。

我尝试过,例如:cell.myButton.setTitle("", for: .normal)在设置我想要使用的实际标题之前,“清除”在集合视图中为每个项目设置的上一个值。

任何可能导致此问题的想法?

提前感谢您的帮助!

2 个答案:

答案 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
}