1

I am new in swift and I am trying to change cell background colour of UICollectionView but its not working my code is like this in cellForItemAt

if(cell.isSelected){
    cell.backgroundColor = UIColor.green
    }else{
       cell.backgroundColor = UIColor.clear
 }

Is there is any way to change only selected cell colour to green and other cell to clear Thanks in Advance!

Muju
  • 884
  • 20
  • 54
  • You cannot test for selected in cellForItem. You set the backgroundView and selectedBackgroundView for all cells. https://developer.apple.com/documentation/uikit/uicollectionviewcell/1620138-selectedbackgroundview – matt Dec 15 '20 at 10:43
  • Does this answer your question? [Change button background color using swift language](https://stackoverflow.com/questions/24427284/change-button-background-color-using-swift-language) – Vitalii Gozhenko Dec 15 '20 at 11:02

2 Answers2

5

Create a variable inside the vc

var currentSelected:Int?

then inside cellForItemAt

cell.backgroundColor = currentSelected == indexPath.row ? UIColor.green : UIColor.clear

finally didSelectItemAt

currentSelected = indexPath.row
collectionView.reloadData()

Don't depend on isSelected as cells are dequeued and when you scroll you'll get unexpected results

Shehata Gamal
  • 98,760
  • 8
  • 65
  • 87
1

According to Apple's explanation about cell's backgroungView and selected backgroundView Here you should change those parameters at the cell class itself and the UICollectionView will know to manage it automatically when the cell is highlighted or selected:

override func awakeFromNib() {
  super.awakeFromNib()

  let redView = UIView(frame: bounds)
  redView.backgroundColor = #colorLiteral(red: 1, green: 0, blue: 0, alpha: 1)
  self.backgroundView = redView

  let blueView = UIView(frame: bounds)
  blueView.backgroundColor = #colorLiteral(red: 0, green: 0, blue: 1, alpha: 1)
  self.selectedBackgroundView = blueView
}
Matan
  • 685
  • 7
  • 18