У меня есть UITableView
с UITextField
в каждом из UITableViewCells
. У меня есть метод в моем ViewController, который обрабатывает событие "Did End On Exit" для текстового поля каждой ячейки, и то, что я хочу сделать, - это обновить мои данные модели новым текстом.
В настоящее время у меня есть:
- (IBAction)itemFinishedEditing:(id)sender {
[sender resignFirstResponder];
UITextField *field = sender;
UITableViewCell *cell = (UITableViewCell *) field.superview.superview.superview;
NSIndexPath *indexPath = [_tableView indexPathForCell:cell];
_list.items[indexPath.row] = field.text;
}
Конечно, работает field.superview.superview.superview
, но это просто кажется таким взломанным. Есть ли более элегантный способ? Если я установил тег UITextField
в indexPath.row
ячейки, в которой он находится в cellForRowAtIndexPath
, этот тег всегда будет правильным даже после вставки и удаления строк?
Для тех, кто уделяет пристальное внимание, вы можете подумать, что у меня есть один .superview
слишком много, а для iOS6 вы были бы правы. Тем не менее, в iOS7 есть дополнительный вид (NDA предотвращает разработку формы) в иерархии между представлением содержимого ячейки и самой ячейкой. Это точно иллюстрирует, почему выполнение элемента супервизора немного хакерское, поскольку оно зависит от того, как реализовано UITableViewCell
, и может ломаться с обновлениями ОС.