根据CollectionView中的选择更改ImageView

时间:2017-08-16 21:27:06

标签: ios swift swift3 uicollectionview

我目前有一个CollectionView,其中包含1个可重复使用的单元格,其中填充了ImageView。该细胞使用10次以显示10种不同的动物(我提供细胞的照片)。我也在此集合视图上方有一个标签。每当用户按下单元格时,标签将变为" 所选动物的名称"。 我现在想要的是让细胞图像在被选中时变暗,并在未被选中时恢复正常。到目前为止,我知道如何更改图像通过用较暗的一个手动切换它,将细胞变为较暗的一个,但我不知道如何将它改回正常状态,因为我选择另一个。 如何实现此功能?我已将代码复制到底部:

//cell configuration
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        //define the cell
        let cell = collectionview.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! AnimalSelectionCell

        //animals is name of array of different types of animals
        cell.animalImage.image = UIImage(named: animals[indexPath.row])
        cell.animalImage.restorationIdentifier = animals[indexPath.row]

        return cell
    }

    //choosing an animal
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {        
            let currentCell = collectionview.cellForItem(at: indexPath) as! AnimalSelectionCell
            let animal = currentCell.animalImage.restorationIdentifier! //gets what type of animal selected
            selectionLabel.text = "\(animal) selected" //changes label
            currentCell.animalImage.image = UIImage(named: animal + "Selected") //changes to darker animal image                 
        }

2 个答案:

答案 0 :(得分:1)

为此,您必须继承UICollectionViewCell并覆盖isSelected属性:

class MyCell: UICollectionViewCell {
    override var isSelected {
        willSet(bool) {
            self.backgroundColor = UIColor.gray // or whatever
        }
    }
}

答案 1 :(得分:1)

您可以定义一个名为var的{​​{1}},并在selectedIndexpath方法中按所选索引路径更改,如果selectedIndexPath相同,则应将selectedIndexpath更改为nil并在{{{ 1}}方法您只需要检查当前indexPath是否等于selectedIndexpath属性

didSelectItemAt