UIKit Zustandskonservierung, die den Scroll-Offset nicht wiederherstellt

8

Ich habe eine App, die UIKit State Preservation in iOS 6 verwendet. Ich kann den Zustand der View-Controller speichern / wiederherstellen, dh welche Registerkarte ausgewählt ist und Navigation Controller-Hierarchie, aber ich kann meine Tabellenansicht nicht wiederherstellen es ist Offset. Ich habe eine Wiederherstellungs-ID in meinem Storyboard für die Ansicht sowie den View-Controller und den View-Controller (die Datenquelle der Tabelle) implementiert UIDataSourceModelAssociation wie folgt:

%Vor%

modelIdentifierForElementAtIndexPath:inView: wird aufgerufen, wenn die App in den Hintergrund tritt, aber modelIdentifierForElementAtIndexPath:inView: wird nie aufgerufen.

    
David Beck 28.11.2012, 19:47
quelle

3 Antworten

3

Ich habe festgestellt, dass dies funktionieren kann, wenn das UITableView auch einen restaurationIdentifier-Satz hat.

Es funktioniert jedoch nicht, wenn sich der UITableViewController in einem UINavigationController befindet. Dies wurde Apple gemeldet, Problem ID: 13536778. Dieses Problem scheint auf iOS 6.0 und 6.1.3 auftreten.

    
JosephH 29.03.2013 18:23
quelle
2

Dies ist keine echte Antwort auf Ihre Frage, aber ich konnte auch keine Table View wiederherstellen, die contentOffset wiederherstellt.

Ich nehme an, das ist ein Fehler in iOS 6, weil die Dokumentation eindeutig besagt, dass UITableView den contentOffset wiederherstellt, wenn 1) ein restorationIdentifier 2) der View-Controller, zu dem die Ansicht gehört, ein restorationIdentifier hat und 3) die Datenquelle entspricht dem Protokoll UIDataSourceModelAssociation .

Sie können das contentOffset und das ausgewählte Element jedoch manuell in Ihrem View-Controller wiederherstellen:

%Vor%

Ich habe keine Ahnung, warum UITableView das nicht automatisch macht, obwohl es in der Dokumentation heißt. Wenn jemand die Antwort kennt, bitte Kommentar.

    
Fabian Kreiser 28.01.2013 17:19
quelle
2

Dies ist ein Fehler in iOS 6.

Um die Statuswiederherstellung für Ihre Tabellenansicht mit dem UIDataSourceModelAssociation -Protokoll zu erhalten, sollten Sie -reloadData in Ihrer Tabellenansicht aufrufen, bevor Sie den gültigen Indexpfad in -indexPathForElementWithModelIdentifier:inView: like so zurückgeben:

%Vor%     
Daniel 05.05.2013 20:01
quelle