Кажется, что у вас есть независимая переменная queryTextField
, которая переопределяется при создании второй ячейки.
Кроме того, в textFieldDidEndEditing
попробуйте получить доступ к textField
вместо queryTextField
, например так:
func textFieldDidEndEditing(_ textField: UITextField) {
var temp = textField.text!
queryArray.append(temp)
print(temp)
}
Отвечая на это:
Мне нужно, чтобы у каждой ячейки было свое текстовое поле, и я должен иметь возможность сохранять их тексты в массив. После этого я собираюсь отправить их на веб-сервис. Подводя итог, они будут моими параметрами.
- Вам не нужно иметь глобальный
queryTextField
только для этого. Вы можете удалить эту переменную, если это ее единственная цель. - Вам нужно отправить веб-запрос по какому-то триггеру? Как кнопка нажмите. Полагаю, да.
- Поскольку теоретически не все ваши ячейки видны одновременно (например, когда они не умещаются на экране), плохая идея пытаться отслеживать текст в текстовых полях. Вместо этого вам нужна какая-то модель для хранения всех текстов (возможно, в паре с индексу). Простейшим был бы словарь, в котором ключ - это идентификатор ячейки (например,
indexPath
), а значение - это текст. - В
textFieldDidEndEditing
вы можете сообщить об изменениях в контроллер представления. Для этого вам нужно назначить ячейку в качестве делегата для ее текстового поля. И просмотр контроллера - как делегата для ячейки. В textFieldDidEndEditing
ячейка будет вызывать метод делегата контроллера представления, чтобы сообщить об изменении текста, передавая (например) self и текст в качестве параметров. Затем контроллер представления сможет найти свой индексный путь и сохранить текст в модели (словарь). - По триггеру (нажатие кнопки?) Контроллер представления сможет создавать параметры из модели (словарь).
Рассматривать этот псевдокод как направление:
cellForRow {
...
cell = ...
let textField = ...
textField.delegate = cell
cell.addSubview(textField)
cell.delegate = self
}
В ячейке:
textFieldDidEndEditing(textField: UITextField) {
delegate?.report(text: textField.text ?? "", in: self)
}
В поле зрения контроллера:
report(text: String, in cell: UITableViewCell) {
let indexPath = tableView.indexPath(of: cell)
model[indexPath] = text
}