So erhalten Sie eine UITableViewCell aus einer ihrer Unteransichten
Ich habe einUITableView
mit einerUITextField
in jedem derUITableViewCells
. In meinem ViewController gibt es eine Methode, die das Ereignis "Did End On Exit" für das Textfeld jeder Zelle behandelt, und ich möchte meine Modelldaten mit dem neuen Text aktualisieren können.
Was ich derzeit habe, ist:
- (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;
}
Natürlich machenfield.superview.superview.superview
funktioniert, aber es scheint nur so abgedreht. Gibt es einen eleganteren Weg? Wenn ich das Tag desUITextField
zumindexPath.row
der Zelle ist in incellForRowAtIndexPath
Ist dieses Tag auch nach dem Einfügen und Löschen von Zeilen immer korrekt?
Für diejenigen, die genau hinschauen, könnte man meinen, ich hätte einen.superview
zu viele da drin und für iOS6 hättest du recht. In iOS7 gibt es jedoch eine zusätzliche Ansicht (NDA verhindert das Ausarbeiten von Formularen) in der Hierarchie zwischen der Inhaltsansicht der Zelle und der Zelle selbst. Dies verdeutlicht genau, warum das Durchführen der Übersichtssache etwas hacky ist, da es vom Wissen wie abhängtUITableViewCell
ist implementiert und kann mit Updates des Betriebssystems abbrechen.