Я пытаюсь добавить рамку вокруг изображения ячейки, когда выбран определенный продукт. Представление коллекции имеет панель поиска, которая перезагружает представление коллекции на основе поисковых слов. Поэтому, если изображение загружается снова, я хочу, чтобы граница все еще присутствовала. Вся функция поиска и добавления границы работает, однако, когда я добавляю границу в одну ячейку, она появляется и в другой ячейке (я проверил, чтобы идентификаторы были разными, и они есть).
Итак, у меня есть массив selectedProducts , который содержит идентификаторы продуктов, на которых должна отображаться граница. При загрузке ячеек я проверяю, имеет ли Продукт, загружаемый в ячейку, идентификатор, который содержится в selectedProducts , и если это условие истинно, я добавляю границу в ячейку. Если оно становится ложным, я хочу удалить границу.
Проблема в том, что используемый мной метод добавляет границы и удаляет границы для ячеек, для которых не нужны границы.
Кто-нибудь может пролить свет на мою проблему? Буду очень признателен!
Спасибо!
Вот код:
var selectedProducts = [String]() /// contains id's of products which are selected
override func viewDidLoad() {
super.viewDidLoad()
collectionView?.register(boxPostCell.self, forCellWithReuseIdentifier: boxPostCell.cellId)
collectionView?.backgroundView?.alpha = 0
collectionView?.backgroundColor = UIColor.white
collectionView?.register(boxswipeCell.self, forCellWithReuseIdentifier: swipeCellId)
collectionView.keyboardDismissMode = .onDrag
collectionView?.reloadData()
}
override func numberOfSections(in collectionView: UICollectionView) -> Int {
return 2
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if section == 1{
return products.count
}
return 1
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let section = indexPath.section
if section == 1{
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: boxPostCell.cellId, for: indexPath) as! boxPostCell
if indexPath.item < products.count {
cell.product = products[indexPath.item]
// products[indexPath.item].id is the id of product in cell
if selectedProducts.contains(products[indexPath.item].id){
UIView.animate(withDuration: 0.5){
cell.photoImageView.transform = .init(scaleX: 0.98, y: 0.98)
cell.contentView.backgroundColor = UIColor(red:169/255, green:0/255, blue:21/255, alpha:1.0)
}
}else{
UIView.animate(withDuration: 0.5) {
if let cell = collectionView.cellForItem(at: indexPath) as? boxPostCell {
cell.photoImageView.transform = .identity
cell.contentView.backgroundColor = .clear
}
}
}
}
cell.delegate = self
return cell
}
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: swipeCellId, for: indexPath) as! boxswipeCell
cell.delegate = self
return cell
}