У меня проблема с представлением моей коллекции. Я пытаюсь реализовать функциональность редактирования, но ячейки, которые не видны в тот момент, когда я нажимаю кнопку «Редактировать», не переходят в «режим редактирования». Вот экран:
Я думаю, что проблема заключается в setEdit, в let indexPaths = collectionView.indexPathsForVisibleItems
, потому что эти ячейки не являются «видимыми элементами» в данный момент. Но в уроке, который я обнаружил, эта реализация позволяет без проблем редактировать любое количество ячеек. Итак, я немного запутался в этом…
class CollectionViewController: UICollectionViewController, NSFetchedResultsControllerDelegate {
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionCell", for: indexPath) as! CollectionViewCell
cell.nameLabel.text = shoes[indexPath.row].name
cell.shoePhoto.image = UIImage(data: shoes[indexPath.row].photo! as Data)
return cell
}
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
collectionView.allowsMultipleSelection = editing
let indexPaths = collectionView.indexPathsForVisibleItems
for indexPath in indexPaths {
collectionView.deselectItem(at: indexPath, animated: false)
let cell = collectionView.cellForItem(at: indexPath) as? CollectionViewCell
cell?.editing = editing
}
}
}
class CollectionViewCell: UICollectionViewCell {
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var shoePhoto: UIImageView!
@IBOutlet weak var checkedImageView: UIImageView!
var editing: Bool = false {
didSet {
nameLabel.isHidden = editing
checkedImageView.isHidden = !editing
}
}
override var isSelected: Bool {
didSet {
if editing {
checkedImageView.image = UIImage(named: isSelected ? "Checked" : "Unchecked")
}
}
}
override func prepareForReuse() {
super.prepareForReuse()
nameLabel.text = ""
shoePhoto.image = nil
if editing {
checkedImageView.image = UIImage(named: isSelected ? "Checked" : "Unchecked")
}
}
}