UITableVielCell mit eigenem Disclosure indicator

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

  • UITableVielCell mit eigenem Disclosure indicator

    Hallo zusammen,

    ich möchte in Abhängigkeit des Vorhandenseins eines Dict-Eintrages einen eigenen Disclosure indicator anzeigen. Wenn Der Eintrag vorhanden ist, soll das Bild angezeigt werden, ansonsten nicht.

    Quellcode

    1. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    2. {
    3. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ListeCell"];
    4. daten_dic = [self.listeGefiltert_arr objectAtIndex:indexPath.row];
    5. cell.textLabel.text = [daten_dic objectForKey:@"titel"];
    6. cell.detailTextLabel.text = [daten_dic objectForKey:@"inhalt"];
    7. cell.textLabel.textColor = [UIColor colorWithWhite:1.0 alpha:1.0];
    8. cell.textLabel.backgroundColor = [UIColor clearColor];
    9. cell.detailTextLabel.textColor = [UIColor colorWithWhite:1.0 alpha:1.0];
    10. cell.detailTextLabel.backgroundColor = [UIColor clearColor];
    11. cell.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.1];
    12. cell.selectionStyle = UITableViewCellSelectionStyleDefault;
    13. if (![[daten_dic objectForKey:@"bild"] isEqualToString:@""]) {
    14. cell.accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"anhang.png"]];
    15. }
    16. UIView *selectedView = [[UIView alloc]init];
    17. selectedView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.3];
    18. cell.selectedBackgroundView = selectedView;
    19. return cell;
    20. }
    Alles anzeigen


    Allerdings wird mir das Bild nach dem Scrollen nach unten und wieder nach oben immer öfter angezeigt und auch bei Einträgen, die keinen "Anhang" haben, also bei denen Kein Eintrag im Dict vorhanden ist.

    Was passiert da?

    LG
    Bernd
    Dateien
    • IMG_2223.PNG

      (519,66 kB, 69 mal heruntergeladen, zuletzt: )
    • IMG_2224.PNG

      (521,32 kB, 74 mal heruntergeladen, zuletzt: )
    • IMG_2225.PNG

      (519,02 kB, 66 mal heruntergeladen, zuletzt: )
    Ich bin gegen Signaturen!!!
  • Klar. Du musst "dequeueReusableCellWithIdentifier" nicht verwenden sondern kannst eine neue Instanz erzeugen.

    Da die Funktion aber zur Performance beiträgt, könntest Du auch zwei Identifier benutzen.
    Das Problem wäre hier aber, dass Du nicht sicher sein kannst das eine Zelle des Typs noch gecached war.

    Ist das nicht der Fall wird einfach eine neue erzeugt.

    Du brauchst also ein "if" wenn Du den caching Mechanismus benutzen willst.

    EDIT:

    Es war zu warm. Ich hatte mal einen eigenen caching Mechanismuss überschrieben.

    developer.apple.com/library/io…c/uid/TP40006938-CH3-SW33

    Siehe bei "prepareForReuse".


    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von pmau ()

  • MCDan schrieb:

    beage schrieb:

    Michael schrieb:

    Initialisiere die Zellen einfach vollständig, d.h. wenn das Bild nicht angezeigt werden soll, setzt du den accessoryView einfach auf nil.


    Ah, super. Hab jetzt vor das if ein cell.accessoryView = nil; gesetzt. Jetzt funktioniert es. Danke!

    Warum verwendest Du nicht einfach einen else Zweig mit cell.accessoryView = nil; ? ;)


    Weil man manchmal den Wald vor lauter Bäumen nicht sieht! Danke!
    Ich bin gegen Signaturen!!!