didDeselectItemAt滚动时崩溃

时间:2020-10-18 19:55:55

标签: ios swift xcode uicollectionview uicollectionviewcell

我刚刚开始使用UICollectionViews。 我想将选定的单元格背景色设置为浅灰色,将未选定的单元格背景色设置为白色。因此,我在CollectionViewController中获得了这些功能:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let selectedCell:UICollectionViewCell = myCollectionView.cellForItem(at: indexPath)!
    selectedCell.contentView.backgroundColor = .lightGray
}

func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
    let cellToDeselect:UICollectionViewCell = myCollectionView.cellForItem(at: indexPath)!
    cellToDeselect.contentView.backgroundColor = .white
}

问题:

当我选择一个单元格然后向下滚动直到所选单元格被隐藏然后点击一个新的单元格时,应用程序崩溃。我认为这是由于事实,我的CollectionView以某种方式回收了那些“隐藏” /未显示的单元格?因此,我首先选择的最顶部的单元格不再存在,因此didDeselectItemAt函数显然会找到nil。

当向下/向上滚动时,如何防止我的collectionview“回收”未显示的单元格?我的猜测甚至是坠机的原因吗?

感谢您的帮助!

编辑

只需重写我的CollectionViewCell类中的isSelected,即可正常工作:

override var isSelected: Bool{
  didSet{
    if self.isSelected
    {
      self.transform = CGAffineTransform(scaleX: 1.1, y: 1.1)
        self.contentView.backgroundColor = .lightGray
    }
    else
    {
      self.transform = CGAffineTransform.identity
        self.contentView.backgroundColor = .white
    }
  }
}

0 个答案:

没有答案