在Swift中的UICollectionView中更改单元格背景颜色

lkaoscv7  于 2023-04-19  发布在  Swift
关注(0)|答案(4)|浏览(167)

我正在使用水平集合视图滚动日期。集合视图包含30个单元格。如果我选择第一个单元格,表示选择,单元格背景颜色已从默认颜色红色更改为棕色。然后,如果我选择另一个单元格,所选单元格颜色已从红色更改为棕色。但第一个单元格BGColor保持不变(棕色)。如何通过单击其他单元格更改为默认颜色?

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath 
   indexPath: NSIndexPath) -> UICollectionViewCell {

    var cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", 
   forIndexPath: indexPath) as myViewCell

    cell.date_label.text = arr_date[indexPath.item]

    }

        func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath 
       indexPath: NSIndexPath) {

        var cell = collectionView.cellForItemAtIndexPath(indexPath) as myViewCell

        if(cell.selected)
        {
            cell.backgroundColor = UIColor.brownColor()

        }
        else
        {
            cell.backgroundColor = UIColor.redColor()
        }

    }
dw1jzc5e

dw1jzc5e1#

可以使用带有参数didSelectItemAtIndexPath的函数collectionView

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath 
   indexPath: NSIndexPath) {

       let selectedCell:UICollectionViewCell = myCollectionView.cellForItemAtIndexPath(indexPath)!
       selectedCell.contentView.backgroundColor = UIColor(red: 102/256, green: 255/256, blue: 255/256, alpha: 0.66)
}

这将为选定的UICollectionViewCell创建一个常量,然后只需更改背景的颜色
然后,要在取消选择时返回到原始颜色,必须使用带有参数didDeselectItemAtIndexPath的函数collectionView

func collectionView(collectionView: UICollectionView, didDeselectItemAtIndexPath indexPath: NSIndexPath) {
        let cellToDeselect:UICollectionViewCell = myCollectionView.cellForItemAtIndexPath(indexPath)!
        cellToDeselect.contentView.backgroundColor = UIColor.clearColor()
}

然后你把颜色改成原来的颜色!
例如,这里是一个filterApp中的代码截图
UICollectionView example

aydmsdu9

aydmsdu92#

var selectedIndex = Int ()

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
{
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell

    cell.backgroundColor = selectedIndex == indexPath.row ? UIColor.green : UIColor.red
    
    return cell
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
{
    selectedIndex = indexPath.row
    
    self.yourCollctionView.reloadData()
}

可能很疯狂,但对我来说很好用...!

z5btuh9x

z5btuh9x3#

您可以维护最后选择的索引路径的副本,然后在didSelectItemAtIndexPath中比较索引路径以查看它们是否不同。如果不同,请根据需要更改这些索引路径处的两个单元格的颜色,然后将新索引路径复制到旧索引路径上。

编辑

再次思考这个问题,这应该通过单元格的backgroundViewselectedBackgroundView属性来完成。在您将单元格出列后,您可以执行以下操作,让iOS处理更改。

cell.backgroundView.backgroundColor = [UIColor redColor];
cell.selectedBackgroundView.backgroundColor = [UIColor brownColor];
zf9nrax1

zf9nrax14#

处理所选单元格背景颜色的最佳方法是观察isSelected属性。这可以处理选择和取消选择单元格,否则在选择任何其他单元格时取消选择所选单元格将很棘手。下面是使用UICollectionViewCellisSelected属性的演示:

class CustomCollectionViewCell: UICollectionViewCell {
    override var isSelected: Bool {
        didSet {
            contentView.backgroundColor = isSelected ? .red : .white
        }
    }
}

相关问题