Я использую это условие для создания определенных UICollectionViewCells.
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if(indexPath.item % 3 == 0){//multiples of 3
let cell = myCollectionView.dequeueReusableCell(withReuseIdentifier: "Cell1id", for: indexPath) as! Cell1
cell.backgroundColor = .white
if(cell.wasCreated){
cell.cellLabel.text = "Cell(1) \(indexPath.item) was created before."
}
else{
cell.cellLabel.text = "Creating cell(1) \(indexPath.item) first time."
cell.wasCreated = true
}
return cell
}
else{
let cell = myCollectionView.dequeueReusableCell(withReuseIdentifier: "Cell2id", for: indexPath) as! Cell2
cell.backgroundColor = .gray
if(cell.wasCreated){
cell.cellLabel.text = "Cell(2) \(indexPath.item) was created before."
}
else{
cell.cellLabel.text = "Creating cell(2) \(indexPath.item) first time."
cell.wasCreated = true
}
return cell
}
}//end cellForItemAt
Здесь 'wasCreated' - это переменная внутри ячейки, которую я использую, чтобы проверить, создается ли ячейка в первый раз, если я установил wasCreated = true
, и это должно быть сделано, в первый раз, для каждой клетки, но это не так.
Условие таково: если indexPath.item
кратно 3, deque ячейка 1, иначе ячейка 2.
Теперь обычно, когда ячейка должна отображаться в первый раз, вызывается метод ячейки init (), но в этом случае он не вызывается и по какой-то причине запрашивается более старая ячейка.
Я понятия не имею, почему это происходит.
Я загрузил пример проекта, который воспроизводит проблему. Вот ссылка: https://github.com/AfnanAhmadiOSDev/IndexMultiplesTest.git