У меня есть представление коллекции, и я использую пользовательский класс для ячеек.Каждая ячейка имеет два текстовых представления, chapterTitleTextView и chapterBodyTextView.Я добавил заполнители для обоих видов текста следующим образом:
class CustomWriterPageCell: UICollectionViewCell, UITextViewDelegate {
// When the user taps on a text view
func textViewDidBeginEditing(_ textView: UITextView) {
if textView.textColor == .gray {
textView.text = nil
textView.textColor = .black
}
}
// When the user taps out of a text view or taps on the done button in the toolbar
func textViewDidEndEditing(_ textView: UITextView) {
// If the chapter title text view is empty
if chapterTitleTextView.text.isEmpty {
chapterTitleTextView.text = "Chapter Title"
chapterTitleTextView.textColor = .gray
}
// If the chapter body text view is empty
if chapterBodyTextView.text.isEmpty {
chapterBodyTextView.text = "Chapter Body"
chapterBodyTextView.textColor = .gray
}
}
}
Как это работает, цвет текста изначально серый, и есть некоторый текст, когда пользователь нажимает на вид текста, цветизменяется на черный, а текст в текстовом представлении удаляется.
Теперь существует проблема с использованием dequeueReusableCell, это то, что он повторно использует ячейки, это вызвало проблему номер 1: что бы я ни вводил в текстовом представлении впервая ячейка появляется в 4-й ячейке, чтобы решить эту проблему, мне нужно было создать 2 глобальных списка для хранения того, что я ввожу, и это отображается в текстовых представлениях ячеек, вот код:
Глобальные списки:
var chapterTitleText = Array(repeating: "", count: 4) // To store the chapter title text
var chapterBodyText = Array(repeating: "", count: 4) // To store the chapter body text
Следующий фрагмент кода находится внутри textViewDidEndEditing от
// Append the chapter body text to the chapterBodyText array
let titleText = chapterTitleTextView.text
let titleRow = textView.tag //This the indexPath.row
chapterTitleText[titleRow] = titleText!
// Append the chapter title text to the chapterTitleText array
let bodyText = chapterBodyTextView.text
let bodyRow = textView.tag
chapterBodyText[bodyRow] = bodyText!
И в cellForItemAt:
cell.chapterBodyTextView.tag = indexPath.row
cell.chapterTitleTextView.tag = indexPath.row
cell.chapterTitleTextView.text = chapterTitleText[indexPath.row]
cell.chapterBodyTextView.text = chapterBodyText[indexPath.row]
Это избавило от проблемы № 1 (дублирование текста в текстовых представлениях).Но потом у меня появилась новая проблема, помните текст заполнителя, о котором я говорил?Когда я что-то наберу в одном из текстовых представлений первой ячейки, цвет текста текстового представления в четвертой ячейке изменится, я добавлю gif, повторяющий проблему, чтобы помочь вам лучше понять, надеюсь, кто-то может помочь мневне, спасибо!:)