У меня длинный список текстовых полей, поэтому я использую tableView.
Так выглядит экран
Когда я вставляю какой-либо текст в текстовое поле в одном из ячейки и прокрутка вниз по некоторым другим ячейкам получают одно и то же значение текстового поля. Я не знаю, почему это произойдет.
Теперь это мой код:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! RelatieToevoegenCell
cell.label.text = items[indexPath.row]
cell.textfield.placeholder = items[indexPath.row]
return cell
}
Основная проблема заключается в том, что вы сохраняете свои данные внутри Views (UITableVieCell).
Ячейки повторно используются UITableView для оптимизации производительности - поэтому, даже если в вашей таблице есть 1 миллион строк, всего несколько UITableViewCells в памяти (как многие из них видны на экране обычно).
Когда вы вызываете dequeueReusableCell, он принимает одну из уже существующих ячеек и повторно ее использует.
Чтобы решить эту проблему, вам нужно хранить свои данные отдельно в массиве и сохранять измененные тексты там. Затем вам нужно изменить код, который вы отправили, и каждый раз, когда вы настраиваете UITableView с вашего «dataSource», каждый раз, когда вы настраиваете данные.
Также хорошей ошибкой является сброс UITableViewCell при повторном использовании, вы можете сделать это, добавив кодирование В этом случае вы можете прочитать это, прежде чем начать кодирование - это позволит понять, как UITableView работает в iOS: [
! d6]
В принципе, вам нужно получить и сохранить значения в view-controller, потому что из-за многоразового поведения UITableViewCell вы потеряли ссылку на невидимую ячейку со всей дочерней ссылкой.
Итак, вы может хранить значение текстового поля посредством действия textViewDidChange в классе RelatieToevoegenCell.