У меня есть пользовательский UICollectionViewCell
, он может выбирать и отменять выделение отдельных ячеек.Проблема возникает, когда вы выбираете, затем снимаете выделение с ячейки, прокручиваете до UICollectionView
, и когда вы возвращаетесь назад, ранее выбранная ячейка показывает, что она выбрана.Это проблема повторного использования.
Вот как я выбираю и отменяю выбор ячейки:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath)! as! CreateNotebookCVCell
if selectedIndexPath != indexPath || selectedIndexPath == nil {
// Select Cell
selectedIndexPath = indexPath
cell.showDimViewAndCheckmark()
selectedCover = notebookCovers[indexPath.row]
saveButton.isEnabled = true
}
else {
// Deselect Cell
selectedIndexPath = nil
cell.hideDimViewAndCheckmark()
selectedCover = nil
saveButton.isEnabled = false
}
}
И это код в самой ячейке:
переопределитьfunc awakeFromNib () {super.awakeFromNib () setUI () // hideDimViewAndCheckmark ()}
override func prepareForReuse() {
super.prepareForReuse()
hideDimViewAndCheckmark()
coverImageView.image = nil
}
func hideDimViewAndCheckmark() {
dimView.isHidden = true
checkmarkIcon.isHidden = true
}
func showDimViewAndCheckmark() {
dimView.isHidden = false
checkmarkIcon.isHidden = false
dimView.layer.cornerRadius = 10
dimView.clipsToBounds = true
dimView.layer.borderWidth = 2
dimView.layer.borderColor = Colors.purpleDarker.cgColor
dimView.layer.maskedCorners = [.layerMaxXMinYCorner, .layerMaxXMaxYCorner]
}
override var isSelected: Bool {
didSet {
if isSelected {
UIView.animate(withDuration: 0.1, animations: { [unowned self] in
self.showDimViewAndCheckmark()
})
}
else {
UIView.animate(withDuration: 0.1, animations: { [unowned self] in
self.hideDimViewAndCheckmark()
})
}
}
}
Не уверен, что я здесь делаю не так
ОБНОВЛЕНИЕ: cellForRowAt
метод какзапрошено
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: Cell_Id.createNotebook, for: indexPath) as! CreateNotebookCVCell
let cover = notebookCovers[indexPath.row]
cell.coverImageView.image = UIImage(named: cover)
return cell
}