По правде говоря, IBOutlet
немного сбивает с толку.Но здесь есть некоторые проблемы, одним из которых является повторное использование клеток.
Поскольку ячейки используются повторно, вы не должны полагаться на текст, сохраняющий их значения, а скорее на то, что вы должны хранить то, что набрано в методе textFieldDidEndEditing:
.Вести массив для введенных или не введенных значений (используя [NSNull null]
singleton).В методе cellForRowAtIndexPath:
, если вы видите существующее текстовое значение, установите текстовое поле текста на это значение.Таким образом, вы можете противостоять эффекту повторного использования ячейки.
Другая проблема связана с выходом StreetName
.Когда ячейки будут созданы, я думаю, StreetName
будет указывать на правильное текстовое поле, но что произойдет, когда ячейки будут использованы повторно.StreetName
будет указывать на текстовое поле последней созданной ячейки, и в результате все присвоения, которые вы делаете в cellForRowAtIndexPath:
, являются неправильными для повторно используемых ячеек.Было бы намного проще, если бы вы создали собственный подкласс UITableViewCell
, в котором вы будете делать cell.myTextField.text = [textFieldStrings objectAtIndex:indexPath.row];
.
В качестве примечания:
StreetName.delegate = self;
StreetName.tag = indexPath.row;
tableViewCellFields[indexPath.row] = StreetName;
[StreetName setInputAccessoryView:keybdToolbar];
Первая и последняя строкито, что вам нужно сделать только один раз при создании ячейки.