UITableView wieder auf die Beine nach oben in einem Abschnitt beim aufrufen reloadRowsAtIndexPaths

Wenn ein Benutzer auf eine Schaltfläche tippt, in einer meiner Zeilen ich bin eine Aktualisierung der zugrunde liegende Modell für die betreffende Zeile und rufen dann reloadRowsAtIndexPaths für die angegebene Zeile (D. H. eine einzige Zeile neu laden).

- (IBAction)handleCompleteTouchEvent:(UIButton *)sender {
    NSIndexPath *indexPath = [self.tableView indexPathForView:sender];
    id item = [self dataForIndexPath:indexPath];

    if ([item respondsToSelector:@selector(completed)]) {
        //toogle completed value
        BOOL completed = ![[item valueForKey:@"completed"] boolValue];
        [item setValue:[NSNumber numberWithBool:completed] forKey:@"completed"];

        [self.tableView beginUpdates];
        [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
        [self.tableView endUpdates];
    }
}

Das problem ist, dass die Tabelle-Ansicht springt zurück an die Spitze der Abschnitt nach diesem Anruf. Wie kann ich dies verhindern und halten Sie die scroll-position, wo es ist?

  • Code sieht OK aus. Kannst du mehr code, der relevant sein kann für das problem? Gibt es irgendeine Stelle im code, wenn Sie Ihre view-controller, wo Sie anrufen [self.tableView reloadData];?
  • Ich fügte hinzu, mehr code zu zeigen, die gesamte Methode. Einmal reloadRowsAtIndexPaths ist aufgerufen, die Tabelle scrollt automatisch an die Spitze der Sektion, aber nur, wenn die Sektion header wird aus dem Bildschirm. Es ist nichts besonderes an der Zellbildung oder der Abschnitt header (nur ein string).
  • Ich bin nicht durchführen jegliche reloadData oder etwas ähnliches. Auch, es gibt nichts in der Dokumentation zu Prellen nach oben in einem Abschnitt auf einer reloadRows. Ich habe nie bemerkt, diese Funktionalität vor, aber dann wieder ich don ' T haben in der Regel Daten, die wechselnden Aktionen innerhalb der Zelle selbst, so ist dies eine neue Art der Interaktion für mich.
  • Versuchen Sie, überprüfen Sie den Wert der indexPath erhielt von indexPathForView. Kann es sein nil. Wenn es also sein muss, wodurch scrollen nach oben.
  • die indexPath ist richtig. Es war das erste, was ich geprüft. Außerdem ist es nicht bounce nach oben in der Tabelle (0,0). Es prallt an den oberen Abschnitt (1,0).
  • Dies ist sicher ein bug und noch nicht behoben !

InformationsquelleAutor xsee | 2014-07-15
Schreibe einen Kommentar