2017-10-25 4 views
-1

Auf meiner App Nachladen, wenn ich tippen sie alle meine Zellen zu öffnen sind alle auf Funktion geladen, indem die Tableview Methode delegiert:UITableViewController, Zellen sind falsch

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> MyClassName {...} 

jedes Mal, also die Zellen geladen werden, ist diese Methode wird genannt. richtig und lädt die Zellen mit weißen Hintergrund folgt Mit dem ersten Mal ist es richtig geladen (alle Zellen mit schwarzem Hintergrund)

image1

Wenn ich mit dem Bildschirm nach unten gehen und es lädt einige verschiedene Zellen es meinen Code auch .

image2

Das Problem tritt auf, wenn ich wieder nach oben.

image3

Es ist wie die Anzahl der weißen Hintergrund Zellen gebracht werden, stellen die einmal Zellen schwarz backgrounded Weißen zu werden (und das ist nicht das, was ich wollte). Ich dachte, sobald die Zellen auf dem Bildschirm geladen sind, sollte es im Speicher des Gerätes bleiben.

Ich habe einige Ausdrucke auf meinen Code gelegt, um zu prüfen, ob sie falsch sind, aber offensichtlich funktionieren sie richtig.

Also frage ich dich, hatte jemand von euch diese Art von Problem oder eine ähnliche? Denkst du, das ist ein iOS Bug?

EDITED, mit Zusatz CODE:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> HistoricoSelectedCell { 
    let cell2 = tableView.dequeueReusableCell(withIdentifier: "historicoCell", for: indexPath) as! HistoricoSelectedCell 

    let item = itemChosen[indexPath.row].item 
    let cell = self.configureCell(cell: cell2, indexPath: indexPath, item: item!) 

    return cell 
} 
+1

Bitte fügen Sie Ihren Code hinzu. Bitte lesen Sie dies: https://stackoverflow.com/help/how-to-ask – Barns

Antwort

0

Es ist ein Problem Wiederverwendungszelle.

Sie generieren eine neue Zelle in func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell durch den Aufruf tableView.dequeueReusableCell(withIdentifier: <identifier string>, for: indexPath) Ich nehme an (Sie müssen wirklich Code mit Ihrer Frage).

Die Zelle, die Sie erhalten, wird wiederverwendet, da sie nicht von Grund auf instanziiert wird, sondern bereits erstellt wurde und für andere Zellen verwendet wird.

Ihre Optionen sind:

1) in dem Verfahren cellForRowAt indexPath alle notwendigen Eigenschaften einstellen.

2) Erstellen Sie eine fund configure(cell: UITableViewCell) Funktion, die die entsprechenden Eigenschaften

3) prepareForReuse() in Ihrem UITableViewClass außer Kraft setzen setzt und Ihre Eigenschaften dort wiederherstellen.

+0

Hallo Jake, du hast Recht! Ich habe die Dequeue-Methode verwendet. 1 - Im Einstellung aller Eigenschaften auf CellForRowAt IndexPath-Methode. 2 - Ive erstellt diese Funktion jetzt zu konfigurieren, aber es wurde in der anderen Methode aufgerufen, so dass ich nicht weiß, wo es aufrufen 3 - Ive suchte nach Option 3, aber keine Methode namens prepareForReuse() Überprüfen Sie meine Frage erneut, ive hat den Code hinzugefügt. Hast du noch einen Tipp? Vielen Dank! –

Verwandte Themen