Auswahl beim Aktualisieren von UITableView über reloadData beibehalten

8

Ich versuche, eine Ansicht ähnlich der von Apple's Kalenderanwendung zu implementieren, die die Startzeit- und Endzeitansicht einstellt. Ich sehe gut aus, aber ich stoße auf zwei Probleme. Zuerst möchte ich, dass die erste Zeile automatisch ausgewählt wird. Ich habe das irgendwie funktioniert mit:

%Vor%

Eine Animation zeigt jedoch an, dass die Grafik beim Laden der Ansicht visuell ausgewählt wird. Ich möchte, dass sie bereits beim Laden der Ansicht ausgewählt wird.

Das zweite und viel wichtigere Problem ist, dass wenn ich die Daten neulade, nachdem der Picker aktualisiert wurde, ich die Auswahl verliere und meine Aufgabe einfach nicht funktioniert.

Jetzt weiß ich, dass dies die Standardaktion von reloadData ist, ich suche nach einer alternativen Methode, um mein Ziel zu erreichen, oder vielleicht, wie ich reloadData erweitern kann, um die aktuelle Auswahl nicht abzuwählen.

Meine Aufgabe ist unten enthalten:

%Vor%

Hinweis: plusOne ist eine Variable, die anfänglich eine Stunde von der aktuellen Uhrzeit angibt.

Vielen Dank im Voraus!

    
Jerome 20.03.2012, 17:04
quelle

2 Antworten

13

Legen Sie für das erste Problem animiert fest: NEIN beim Methodenaufruf. Sie setzen es gerade auf JA.

%Vor%

Beim zweiten Problem ist es nicht wirklich klar, was Sie nach dem erneuten Laden der Daten auswählen möchten, aber ich sehe ein Problem mit dieser Zeile:

%Vor%

Sie fragen, ob der Zeiger auf das Objekt 0 ist. Ich denke, was Sie wollen, ist entweder das index == nil oder das index.section == 0 && index.row == 0 oder etwas ähnliches zu überprüfen.

Wenn Sie reloadData auf UITableView aufrufen, verlieren Sie die Auswahl. An diesem Punkt müssen Sie eine neue Zeile auswählen. Wenn in Ihrem Datenmodell ein Element vorhanden ist, das Sie auswählen möchten, müssen Sie herausfinden, wo es sich befindet, und es anhand der Position in der Tabelle auswählen. Sie sollten dies wissen, da Sie diese Informationen im UITableViewDataSource-Delegaten bereitstellen Methoden.). Wenn Sie alternativ den NSIndexPath auswählen möchten, den Sie in der ersten Zeile von dateChanged gespeichert haben, wählen Sie ihn einfach aus, nachdem Sie die Daten erneut geladen haben.

    
Brian Cooley 20.03.2012, 17:06
quelle
1

Schreiben Sie für das erste Problem Ihren Code in didSelectRowAtIndexPath: in einer Methode. Sie können diese Methode dann von didSelectRowAtIndexPath aufrufen: Sie sollten indexPath als Argument an Ihre Funktion übergeben, wie

%Vor%

In viewDidLoad rufen Sie diese Methode als

auf %Vor%

Für das zweite Problem ist mein Vorschlag, jedes Mal, wenn Sie eine Zelle auswählen, den Text dieser Zelle in einem NSString zu speichern. Wenn Sie Daten innerhalb von cellForRowAtIndexPath erneut laden: Vergleichen Sie den Text der Zelle mit dem zuvor gespeicherten String-Inhalt. Wenn sie gleich sind, selektiere einfach die Auswahl mit

%Vor%

Methode. Hoffe das wird deine Probleme lösen.

    
rakeshNS 20.03.2012 17:36
quelle

Tags und Links