Custom UITableViewCells werden falsch wiederverwendet

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Custom UITableViewCells werden falsch wiederverwendet

    Hallo iOS Entwickler,

    ich hab mir eine eigene Klasse geschrieben, die von UITableViewCell erbt.
    In dieser Cell befindet sich ein UITextField. Da steht 0 drin und wenn ich durch das UITableView scrolle steht da immernoch 0 drin.
    Wenn ich aber in eine Zelle z.B. 512 schreibe und dann scrolle, sodass die Zelle aus dem sichtbaren Bereich kommt, steht die 512 plötzlich in anderen Zellen.
    Ich glaube es liegt daran, dass die Zellen falsch wiederverwendet werden. Wie kann ich das unterbinden?
  • Mac & i Test Abo
  • Quellcode

    1. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    2. {
    3. static NSString *sCellIdentifier = @"PopulationCell";
    4. APC_PopulationCell *tvcCell = [tableView dequeueReusableCellWithIdentifier:sCellIdentifier];
    5. if (tvcCell == nil)
    6. {
    7. tvcCell = [[APC_PopulationCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:sCellIdentifier];
    8. }
    9. tvcCell.maPopulation = maPopulation;
    10. tvcCell.bbiCalculate = bbiCalculate;
    11. tvcCell.tfPopulation.placeholder = NSLocalizedString(@"EnterValue", @"");
    12. tvcCell.tvPopulation = tableView;
    13. ...
    14. // Zelle generieren
    15. ...
    16. return tvcCell;
    17. }
    Alles anzeigen
  • Es liegt an der richtigen Wiederverwendung. ;)

    Der Sinn ist ja, möglichst wenig Cells im Speicher zu haben,
    aber dennoch möglichst wenig Zellen komplett neu erstellen zu müssen.

    Sprich eine Zelle wird nicht nur für den selben Inhalt wiederverwendet, sondern sobald eine Zelle vom selben Typ (Identifier) benötigt wird.


    Du darfst deine indexPath-spezifischen Inhalte also nicht in die if-Abfrage packen, sondern dahinter wie macmoonshine schon sagte.
    Dann passiert das "teure" Erstellen einer Zelle nur wenn nötig,
    das Zweisen der Daten aber immer.