• Wieder einmal haben uns unsere Apfeltalker tolle Fotos zur Abstimmung eingesandt. Welches ist Euer Favorit? Stimmt mit ab! Hier geht es zur Abstimmung --> Klick
  • Es ist bereits Apfeltalk-Tradition und wir möchten sie auch in diesem Jahr fortsetzen: Unser Apfeltalk-Weihnachtslogo-Wettbewerb hat begonnen! Gestaltet für uns das Weihnachtsbanner, das im Monat Dezember bis zum Weihnachtsfest unsere Webseite schmücken soll. Lasst Eurer Kreativität freien Lauf! Hier geht es zum Wettbewerb --> Klick

Wie kann ich verhindern, dass UITableViewCell unerwünschte Farbe beim Scrollen lädt?

avarobot

Golden Delicious
Registriert
09.04.12
Beiträge
9
Hi,
ich benutze ein UITableView mit NSFetchedResultsController
Wenn ich die Farbe von UITableViewCell verändere (Als Cell Markierung), komm diese Farbe beim scrollen leider auch an mehrere Cell mit gleichen Abstände. Ich vermute, dass diese wegen den Lazy Loading ist.
Aber wie kann ich diese verhindern?

Bildschirmfoto 2013-09-07 um 00.42.59.pngBildschirmfoto 2013-09-07 um 00.43.33.png
 
Ich verstehe nicht ganz genau was du mit "[...] Wenn ich die Farbe von UITableViewCell verändere (Als Cell Markierung), komm diese Farbe beim scrollen leider auch an mehrere Cell mit gleichen Abstände. Ich vermute, dass diese wegen den Lazy Loading ist [..]" meinst.

Die Fachbegriffe sind mir klar, aber dein Vorgehen nicht.
Ich vermute allerdings ,dass dies nichts mit "Lazy Loading" zu tun hat, sondern mit der Wiederverwendung" von Tabellenzeilen.
Setzt du die Hintergrundfarbe der Tabellenzeilen explizit auf "blau" wenn sie nicht "grün" sein darf?

Sonst erzeugst du mit deinem "111111" - Eintrag eine UITableVieCell mit einem grünen Hintergrund.
Dieses Zeile wird später beim Herunterscrollen deiner Tabelle wiederverwendet und besitzt dann einen grünen Hintergrund.

Edit:
Hier solltest du fündig werden:
Code:
[/COLOR][COLOR=#000000]- ([/COLOR][URL="https://developer.apple.com/library/ios/documentation/uikit/reference/UITableViewCell_Class/Reference/Reference.html#//apple_ref/doc/c_ref/UITableViewCell"]UITableViewCell[/URL][COLOR=#000000] *)tableView:([/COLOR][URL="https://developer.apple.com/library/ios/documentation/uikit/reference/UITableView_Class/Reference/Reference.html#//apple_ref/doc/c_ref/UITableView"]UITableView[/URL][COLOR=#000000] *)[/COLOR][I]tableView[/I][COLOR=#000000] cellForRowAtIndexPath:([/COLOR][URL="https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSIndexPath_Class/Reference/Reference.html#//apple_ref/doc/c_ref/NSIndexPath"]NSIndexPath[/URL][COLOR=#000000] *)[/COLOR][I]indexPath[/I][COLOR=#333333]
[/COLOR]

 
Wenn ich nach rechts swipe, dann soll ein grüne Layer auf das Cell sichtbar sein. Das funktioniert mit wenige Einträge ganz gut, aber wenn viele Einträge vorhanden sind, passiert wie auf dem Bild, dass nicht nur das geswipte Cell grün ist, sondern leider auch die andere. Ich denke, dass es aufgrund des nachladen passiert. Und ich möchte, dass nur das Cell Grün ist, welches geswipe wurde!
 
Ohne Code ist es immer schwierig zu helfen, allerdings vermute ich in der von mir erwähnten Methode immer noch den Fehler.

Tabellenzeilen werden im Regelfall wiedeeverwendet. und wenn du sagst, dass es erst bei größeren Tabellen auftritt bin ich mir ziemlich sicher, dass es damit zusammen hängt.
 

Setzt du die Hintergrundfarbe der Tabellenzeilen explizit auf "blau" wenn sie nicht "grün" sein darf?

Hier solltest du fündig werden:
Code:
[COLOR=#000000]- ([/COLOR][URL="https://developer.apple.com/library/ios/documentation/uikit/reference/UITableViewCell_Class/Reference/Reference.html#//apple_ref/doc/c_ref/UITableViewCell"]UITableViewCell[/URL][COLOR=#000000] *)tableView:([/COLOR][URL="https://developer.apple.com/library/ios/documentation/uikit/reference/UITableView_Class/Reference/Reference.html#//apple_ref/doc/c_ref/UITableView"]UITableView[/URL][COLOR=#000000] *)[/COLOR][I]tableView[/I][COLOR=#000000] cellForRowAtIndexPath:([/COLOR][URL="https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSIndexPath_Class/Reference/Reference.html#//apple_ref/doc/c_ref/NSIndexPath"]NSIndexPath[/URL][COLOR=#000000] *)[/COLOR][I]indexPath[/I][COLOR=#333333]
[/COLOR]


Wie soll ich die Tabellenzeile auf blau setzen wo nicht grün sein darf?
Code:
   self.tableView.backgroundColor = [UIColor colorWithRed:0.160784F green:0.501961F blue:0.725490F alpha:1.0F];[COLOR=#000000]
[/COLOR]
ich habe mit diesem Code die Farbe für alle gesetzt!

hier ist mein "cellForRowAtIndex" Code:

Code:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifier = @"VocabCell";
    
    GVocabTableCell *cell = (GVocabTableCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    [self configureCell:cell atIndexPath:indexPath];
    return cell;
}

- (void) configureCell:(GVocabTableCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
    self.vocab = [self.fetchedResultsController objectAtIndexPath:indexPath];
    
    cell.questionLabel.text = self.vocab.question;
    cell.answerLabel.text = [NSString stringWithFormat:@" %@    ", self.vocab.answer];


    cell.delegate = self;
}
 
Hi,
ich hab die grüne indexpath in ein array gespeichert und konnte damit die Zelle voneinander differenzieren.
Das funktioniert wunderbar :)
Danke für dein Tipp

Code:
 if ([_greenCellArray containsObject:indexPath]) {        cell.questionLabel.backgroundColor = [[UIColor alloc] initWithRed:0.0 green:0.6 blue:0.0 alpha:1.0];
        cell.answerLabel.backgroundColor = [[UIColor alloc] initWithRed:0.0 green:0.6 blue:0.0 alpha:1.0];
    }
    else
    {
        cell.questionLabel.backgroundColor = [UIColor colorWithRed:0.160784F green:0.501961F blue:0.725490F alpha:1.0F];
        cell.answerLabel.backgroundColor = [UIColor blueColor];
    }
 
  • Like
Reaktionen: lx88