2016-05-13 3 views
0

Ich habe eine Tabellenansicht und in der Zelle habe ich Textbeschriftung, die likes Count anzeigt. Wenn ich die App z. B. lese, wird Anzahl 3 angezeigt. Wenn ich jedoch nach unten scrolle und dann nach oben zurückkehre, wird diese 3 zu einer anderen Nummer.Wie kann die Wiederverwendung von Zellen für das Textlabel verhindert werden?

Ich weiß, dass es wegen der Wiederverwendung von Zellen ist. Wie kann ich diese Nummern für jede Zelle speichern und sie nicht auf Blättern aktualisieren?

Bilder I \ habe mit AlamofireImage zwischengespeichert, aber ich weiß nicht, was mit diesem Text zu tun Etikett

+0

Bitte geben Sie den entsprechenden Code ein – Shubhank

+0

Sie setzen einfach den Wert der Bezeichnung in 'cellForRowAtIndexPath' - die Zelle ist nur eine Ansicht auf Ihre Daten, so Wiederverwendung sollte kein Problem sein, aber ja, bitte posten Sie Ihre' cellForRowAtIndexPath' als Minimum – Paulw11

Antwort

0

Der Teil, der Sie wird fehlen, dass Sie den Zeilenindex Index in Ihre Daten verwenden müssen. Natürlich können wir Ihren Code nicht sehen, aber es klingt so, als würden Sie ihn nicht benutzen. Im Allgemeinen haben Sie ein Array von Daten und in cellForRowAtIndexPath verwenden Sie den Index, um das richtige Datenelement zu suchen.

0
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { 

let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath:indexPath) as! MyCell 

cell.textLabel.text = "\(likesCount)" 

return cell 
} 
0

Ist Ihre Zelle eine Unterklasse von UITableViewCell?

Geben Sie Ihre Zelle ein Identifier (Wiederverwendung Identifier) ​​über IB und dann

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    MyTableViewCellSubclass *cell = [tableView dequeueReusableCellWithIdentifier:@"your_identifier"]; 
    // .. your code 
} 

Und die Methode in der Unterklasse neu definieren

- (void)prepareForReuse 
{ 
    self.yourCountLabel.text = @"0"; // "reset" value 
} 
0

Sie es nicht verhindern (es sei denn, Sie wollen um die Leistung Ihrer Anwendung absolut zu töten). Du umarmst es.

In CellForRowAtIndexPath erhalten Sie eine Zelle, die zuvor für eine andere verwendet wurde. Also änderst du alles, was du nicht sein willst, wie für eine unbekannte andere Zeile.

1

Im cellForRowAtIndexPath können Sie den IndexPath verwenden, um den richtigen Wert zurück zu erhalten. Ich kann Ihren Code nicht sehen, wenn Sie also nur eine Zahl wie 1 verwenden, 2, 3, 4, etc, können Sie Beispiel tun: cell.label.text = indexPath.row + 1

oder wenn Sie einen Array verwenden, könnten Sie tun, die folgenden

cell.label.text = array[indexPath.row] 

Hoffe, das hilft!

Verwandte Themen