UICollectionView上的奇怪细胞反应

时间:2016-01-27 03:02:14

标签: ios swift uicollectionview

我对包含UICollectionView的VC有一个非常奇怪的问题。我正在尝试使用之前已由用户选择的单元格,1)减少其alpha,以及2)取消隐藏单元格左上角的图标。我的收藏加载两次。一旦使用先前存储在设备中的数据源,然后从API加载新数据。

我发现最初视图正确加载,但奇怪的是,每个单元格中的alpha颜色都是正确的,但有些单元格在第二次加载时取消隐藏图标!

我不知道是什么原因引起的。有什么帮助吗?

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath)

    if defaults.boolForKey("gotPL") {

        let catNumber = cell.viewWithTag(1) as! UILabel
        let catTitle = cell.viewWithTag(2) as! UILabel

        catNumber.text = String(indexPath.item + 1)
        catTitle.text = defaults.arrayForKey("playlistTitles")![indexPath.item] as? String

        cell.layer.cornerRadius = 30

//CUSTOM LOAD FUNCTIONALITY STARTS HERE
        if defaults.arrayForKey("selectedArray") != nil {
            let selectedArray: [String] = defaults.arrayForKey("selectedArray") as! [String]
            if selectedArray.contains(defaults.arrayForKey("playlistTitles")![indexPath.item] as! String) {
                print(indexPath.item)
                cell.alpha = 0.5 //WORKS CORRECTLY
                cell.viewWithTag(3)?.hidden = false //IS REPLICATED INCORRECTLY ON SECOND LOAD
            }
        }

        return cell
    }

    return cell
}

First Load Second Load

1 个答案:

答案 0 :(得分:2)

对于每个单元格而言,您需要cell.alphacell.alpha的刷新值,而不是if条件单元格条件。原因是细胞重用。

    cell.alpha = 1 
    cell.viewWithTag(3)?.hidden = true
    if defaults.arrayForKey("selectedArray") != nil {
                let selectedArray: [String] = defaults.arrayForKey("selectedArray") as! [String]
                if selectedArray.contains(defaults.arrayForKey("playlistTitles")![indexPath.item] as! String) {
                    print(indexPath.item)
                    cell.alpha = 0.5 //WORKS CORRECTLY
                    cell.viewWithTag(3)?.hidden = false //IS REPLICATED INCORRECTLY ON SECOND LOAD
                }
            }
祝你好运!