mike vorisis mike vorisis - 1 year ago 75
iOS Question

Error while selecting and deselecting rows in collectionview

I have a problem when I quickly selecting and deselecting rows in my collectionview.
I have a map and above it i have a horizontal collectionview that i choose what i want to see.

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

let selectedCell:UICollectionViewCell = collectionView.cellForItemAtIndexPath(indexPath)!
selectedCell.contentView.backgroundColor = UIColor(red: 102/256, green: 255/256, blue: 255/256, alpha: 0.66)
switch indexPath.row {
case 0:
case 1:
case 2:
case 3:



and the code for deselecting is:

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

The error i get is this:

fatal error: unexpectedly found nil while unwrapping an Optional value

When i tried to selecting slowly the cells i didn't get the error
But if i do it quickly it crashes

I commented the deselect function and i didn't get any errors (and i check it with quick change of cells)

Answer Source

Instead of changing color in didSelect and didDeSelect try something like this

 func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CustomCell", forIndexPath: indexPath) as! CustomCell
     let view = UIView(frame: cell.contentView.bounds)
     view.backgroundColor = UIColor(red: 102/256, green: 255/256, blue: 255/256, alpha: 0.66)
     cell.selectedBackgroundView = view

Hope this will help you.