Как решить проблему границы UIButton после перезагрузки представления коллекции - PullRequest
0 голосов
/ 01 ноября 2019

Мне нужно применить к UIButton рамку, цвет которой совпадает с цветом фона UIButton, он работает нормально, но когда я перезагружаю представление коллекции, оно применяется к другой кнопке, а при следующей перезагрузке - к другой. Предположим, что если представление коллекции перезагружается 3 раза, тогда оно применяет границу к кнопке 3, что неправильно, следует применять только те кнопки, цвет фона которых соответствует цвету переменной цвета

Примечание: - одновременно может быть только одна кнопкабордюр.

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ChromazonColorCell", for: indexPath) as! ChromazonColorCell
    cell.configureData(data: colorSource[indexPath.row])
    cell.cellColorButton.tag = indexPath.row
    if color == colorSource[indexPath.row] {
        cell.cellColorButton.layer.cornerRadius = 5.0
        cell.cellColorButton.clipsToBounds = true
        cell.cellColorButton.layer.borderWidth = 2
        cell.cellColorButton.layer.borderColor = UIColor.black.cgColor
    }
    return cell
}

Ответы [ 2 ]

2 голосов
/ 01 ноября 2019

Я думаю, что это должно сработать для вас ... когда вы перезагрузите представление коллекции, он снова будет использовать вашу ячейку. и ваша повторно используемая ячейка будет иметь границу, поэтому она применяется и к другим ячейкам. пожалуйста, попробуйте ниже решение

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
  let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ChromazonColorCell", for: indexPath) as! ChromazonColorCell
  cell.configureData(data: colorSource[indexPath.row])
  cell.cellColorButton.tag = indexPath.row
  if color == colorSource[indexPath.row] {
    cell.cellColorButton.layer.cornerRadius = 5.0
    cell.cellColorButton.clipsToBounds = true
    cell.cellColorButton.layer.borderWidth = 2
    cell.cellColorButton.layer.borderColor = UIColor.black.cgColor
  }
else{
    cell.cellColorButton.layer.cornerRadius = 5.0
    cell.cellColorButton.clipsToBounds = true
    cell.cellColorButton.layer.borderWidth = 0
    cell.cellColorButton.layer.borderColor = UIColor.clear.cgColor
}
 return cell
}
1 голос
/ 01 ноября 2019

Диксит Ратод уже ответил.

но вы также можете использовать свой код и prepareForReuse метод в своей ячейке :

func prepareForReuse(){ 
    super.prepareForReuse()

    cellColorButton.layer.cornerRadius = 0.0
    cellColorButton.clipsToBounds = true
    cellColorButton.layer.borderWidth = 0
    cellColorButton.layer.borderColor = UIColor.clear.cgColor
}
...