SDWebImage + UITableViewCell, falsches Bild beim Scrollen?

9

Ich habe ein Problem mit SDWebImage, um Bilder in eine UIImageView in einer benutzerdefinierten UITableViewCell zu laden. Dies ist mein Code beim UITableView-Delegaten:

%Vor%

Und hier ist mein Code für loadFromDictionary:

%Vor%

Nun ist das Problem, wenn ich scrolle, bevor einige Bilder fertig geladen werden. Nehmen wir zum Beispiel an, ich sehe die ersten 8 Zeilen und die Zeilen 1, 2 und 3 laden immer noch ihre Bilder, jetzt scrolle ich zu 9-16, ich sehe die defaultAvatar für alle und nach ein paar Sekunden (d Raten Sie, wenn die Bilder der Zeilen 1, 2 und 3 den Download beenden), die Bilder auf den Zellen 9, 10 und 11 ändern sich zu denen, die zu 1,2 und 3 gehören. Ich weiß nicht, ob es eine Möglichkeit gibt, das Herunterladen der Bilder zu stoppen, wenn ich die Zelle wiederverwende oder so etwas. Danke und Entschuldigung für mein Englisch!

    
DemianArdus 19.05.2014, 15:03
quelle

5 Antworten

15

Wenn Sie Ihr UITableViewDelegate für Ihre Tabelle festgelegt haben, können Sie die Delegate-Methode verwenden:

- tableView:didEndDisplayingCell:forRowAtIndexPath:

, um das Bild auf NULL (oder den Standardwert) zu setzen, wenn die Zelle vom Bildschirm abrollt.

Und da Sie SDWebImage verwenden, könnte das Abbrechen so einfach sein wie " cancelCurrentImageLoad " in der Bildansicht der Zelle.

    
Michael Dautermann 19.05.2014, 15:07
quelle
3

Überschreibe prepareForReuse -Methode in deiner Zellenklasse und annulliere alle Ladungen dort. Vergiss nicht, super

aufzurufen     
George Petrov 19.05.2014 15:22
quelle
1

Beispiel für die Antwort oben. Swift 3

%Vor%     
Andrzej Solokh 19.05.2017 17:31
quelle
0

Ich erhielt leere Bilder mit der akzeptierten Antwort und da die Bilder, die ich lade, klein sind, wollte ich die Bilder im Hintergrund zwischenspeichern lassen und die Ladung nicht abbrechen.

  1. Drücken Sie vor der Schließung eine eindeutige ID auf den Stapel und prüfen Sie, ob Ihre Schließung abgeschlossen ist
  2. prepareForReuse

So:

%Vor%

und das:

%Vor%     
Tony 18.07.2017 16:15
quelle
0

Rufen Sie einfach sd_cancelCurrentImageLoad auf und setzen Sie [imageView setImage:nil] vor Aufruf sd_setImageWithURL .

%Vor%     
Bhavesh Patel 05.09.2017 08:56
quelle

Tags und Links