Проблема в том, что вы не указываете, какой текст должен отображаться в каждом из textView вашего CollectionViewCell.Пока вы не укажете то же самое в cellForItemAt indexPath
, будет отображаться повторно использованная ячейка и ее содержимое, начиная с dequeueReusableCell
, как вы сказали.
Для решения вашей конкретной проблемы вы можете сделатькак показано ниже в контроллере вида:
`var textViewContentArray = [Int: String]()` //Create a dictionary to hold the texts globally
В textViewDidEndEditing :
func textViewDidEndEditing(_ textView: UITextView) {
if textView.text.isEmpty {
textView.textColor = .gray
textView.text = "Chapter Title"
} else {
guard let cell = textView.superview?.superview as? CustomWriterPageCell else {
return
}
guard let indexPath = self.collectionView.indexPath(for: cell) else { return }
textViewContentArray[indexPath.row] = textView.text
}
}
В textViewDidBeginEditing :
func textViewDidBeginEditing(_ textView: UITextView) {
textView.textColor = .black
}
И в cellForItemAt indexPath :
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CustomWriterPageCell", for: indexPath) as! CustomWriterPageCell
cell.textView.delegate = self
let text = textViewContentArray[indexPath.row]
if !text.isEmpty {
cell.textView.textColor = .black
cell.textView.text = text
} else {
cell.textView.textColor = .gray
cell.textView.text = "Chapter Title"
}
return cell
}
Примечание : вот яПредполагая, что вы установили Controller, который хранит collectionView в качестве делегата для textViewInCell, если ячейка является делегатом, вы можете обновить textViewContentArray, используя протокол
Надеюсь, что это добавляет вашего понимания.