Jak zdobyć UITableViewCell z jednego z jego podstron
mamUITableView
zUITextField
w każdym z nichUITableViewCells
. Mam metodę w moim ViewControllerze, która obsługuje zdarzenie „Did End On Exit” dla pola tekstowego każdej komórki i to, co chcę zrobić, to zaktualizować dane modelu o nowy tekst.
Obecnie mam:
- (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;
}
Oczywiście robięfield.superview.superview.superview
działa, ale wydaje się tak hacky. Czy jest bardziej elegancki sposób? Jeśli ustawię tag tegoUITextField
doindexPath.row
komórki, w której się znajdujecellForRowAtIndexPath
czy ten tag będzie zawsze poprawny nawet po wstawieniu i usunięciu wierszy?
Dla tych, którzy zwracają szczególną uwagę, możesz pomyśleć, że je mam.superview
za dużo tam, a dla iOS6 miałbyś rację. Jednak w systemie iOS7 istnieje dodatkowy widok (NDA uniemożliwia opracowanie formularza) w hierarchii między widokiem zawartości komórki a samą komórką. To dokładnie ilustruje, dlaczego robienie superviewa jest trochę hacky, ponieważ zależy od tego, jak to zrobićUITableViewCell
jest zaimplementowany i może przerwać aktualizację systemu operacyjnego.