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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage