Как получить UITableViewCell из одного из его подпредставлений
у меня естьUITableView
сUITextField
в каждом изUITableViewCells
, У меня есть метод в моем ViewController, который обрабатывает событие «Сделал конец при выходе» для текстового поля каждой ячейки, и я хочу иметь возможность обновлять данные моей модели новым текстом.
Что у меня сейчас есть:
- (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
реализован и может порваться с обновлениями ОС.