Изменить цвет ячейки при нажатии UICollectionView - PullRequest
0 голосов
/ 16 апреля 2019

Я работаю над приложением с UICollectionView и использую didSelectItemAt, чтобы изменить логическое значение, но мне нужно изменить цвет ячейки, когда я нажимаю на нее.Это didSelectItemAt, который я использую:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "PhotoCell", for: indexPath) as! PhotoCell

    let caseName = OLLData.list[indexPath.item].image
    print(caseName, OLLData.list[indexPath.item].selected)

    OLLData.list[indexPath.item].selected = !OLLData.list[indexPath.item].selected

    if OLLData.list[indexPath.item].selected == true {
        cell.imageView.backgroundColor = UIColor.yellow
        print("Changed Colour to Yellow")
    }
    else {
        cell.imageView.backgroundColor = UIColor.clear
        print("Changed Colour to Clear")
    }

}

Правильно ли я делаю это, или есть другой?

1 Ответ

2 голосов
/ 16 апреля 2019

Заменить

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "PhotoCell", for: indexPath) as! PhotoCell

на

let cell = collectionView.cellForItem(at: indexPath) as! PhotoCell

Или лучше после того, как вы примените изменения к модели, перезагрузите этот indexPath

collectionView.reloadItems(at:[indexPath])

dequeueReusableCell mustnне может использоваться вне cellForItemAt


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "PhotoCell", for: indexPath) as! PhotoCell  
    cell.imageView.backgroundColor = OLLData.list[indexPath.item].selected ? UIColor.yellow : UIColor.clear  
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)  {
    let caseName = OLLData.list[indexPath.item].image
    print(caseName, OLLData.list[indexPath.item].selected) 
    OLLData.list[indexPath.item].selected = !OLLData.list[indexPath.item].selected 
    collectionView.reloadItems(at:[indexPath])
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...