2016-12-03 4 views
1

Ich habe tableView mit Zeilen. Wenn ich auf die Zeile UIActivityIndicator klicke, beginne zu animieren. Aber wenn ich scroll tableView Indikator verschwindet. Wie man es repariert?UIActivityIndicator verschwindet

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
spinner.frame = CGRectMake(0, 0, 24, 24); 
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
cell.accessoryView = spinner; 
[spinner startAnimating]; 

Antwort

1

Es passiert, weil Ihre Zelle beim Scrollen wiederverwendet wird. Sie müssen den Status für die Animation von UIActivityIndicator in Ihrem Modell speichern und die benötigte Zelle nach Index neu laden.

1

Dies ist keine Frage "was soll ich zum Code hinzufügen?". Dies ist eine Frage "Ich verstehe nicht, wie Tabellenansichten funktionieren".

Ihnen Zeile für Zeile mitteilen, welcher Code geändert werden soll, wird Ihnen nicht helfen. Stattdessen müssen Sie lernen und verstehen, wie Tabellenansichten funktionieren.

Tabellenansichtszellen werden erstellt und dann immer wieder verwendet. Wenn eine Zelle außerhalb des Bildschirms scrollt, entfernt das System die Zelle vom Bildschirm und legt sie in den "Papierkorb". Wenn eine neue Zeile in die Ansicht scrollt, versucht das System, eine Zelle aus dem Papierkorb zu entfernen und damit die Info für die neu geöffnete Zeile anzuzeigen, anstatt eine neue Zelle zu erstellen. Es erstellt nur eine brandneue Zelle, wenn sich keine Zellen des gewünschten Typs im Papierkorb befinden. Sobald Sie genügend Zellen erstellt haben, um den Bildschirm zu füllen, muss das System beim Scrollen wahrscheinlich keine neuen Zellen erstellen.

Zurück zu Ihrem Aktivitätsindikator in einer Zelle.

Sie fügen einer Zelle einen Aktivitätsindikator hinzu und starten ihn. Dann scrollt der Benutzer diese Zelle außerhalb des Bildschirms. Diese Zelle wird wiederverwendet, um eine andere Zeile anzuzeigen. Wahrscheinlich sehen Sie irgendwann eine neu exponierte Zelle mit einem Aktivitätsindikator, den Sie nicht erwarten.

Wenn der Benutzer dann zurück zu der Zeile blättert, der Sie zuvor einen Aktivitätsindikator hinzugefügt haben, wird kein Drehaktivitätsindikator angezeigt, es sei denn, Sie richten die neue Zelle für diese Zeile ein oder die Zelle, die Sie erhalten aus dem Papierkorb hat zufällig einen Drehaktivitätsindikator.

Jedes Mal, wenn Sie den Status einer Zelle ändern, müssen Sie Informationen darüber speichern, was Sie an Ihrem Datenmodell getan haben ("die Zelle in Zeile 6 wartet auf einen Download").

Dann in Ihrer cellForRowAtIndexPath Methode müssen Sie vollständig die Zelle konfigurieren. Erstellen Sie Ihre Zellprototypen, damit die Zelle immer einen Aktivitätsindikator hat, aber es ist ausgeblendet, wenn es nicht dreht. Wenn eine Zelle für eine Zeile einen Aktivitätsindikator zum Drehen benötigt, setzen Sie sie auf spinning. Wenn es keinen Indikator für die Drehaktivität benötigt, setzen Sie das Kennzeichen explizit auf den Status NICHT drehen (weil es sich möglicherweise um eine recycelte Zelle handelt, die mit einem Drehaktivitätsindikator in den Papierkorb geworfen wurde). Setzen Sie auch alle Textfelder/Beschriftungen/Textansichten auf ihre Standardzustände. Angenommen, jede einzelne Ansicht der Zelle, die möglicherweise vom Standardzustand WAS geändert wurde, wurde vom Standardstatus geändert und explizit auf den Standardstatus gesetzt.

Verwandte Themen