UITableViewCell wird direkt wieder 'deselected'

  • UITableViewCell wird direkt wieder 'deselected'

    Folgendes Problem: Ich habe eine Liste von Räumen, die in Gruppen anhand Ihrer Etage sortiert und gruppiert sind. Diese Gruppen kann man über das HeaderView ein- bzw. ausklappen. Soweit so gut, klappt alles. Jetzt hat ein anderer Azubi beim Testen festgestellt, dass ein Raum manchmal zwar markiert wird, die Markierung aber sofort wieder verschwindet. Das tritt nur auf, wenn zuvor eine der Etagen zugeklappt wurde.

    Meine Vermutung war nun, dass nach der Markierung erneut ein Reload stattfindet, allerdings ist dem nicht so. Es wird an keiner Stelle erneut im Code explizit eine Aktualisierung der Liste durchgeführt. Dennoch wechselt der 'selected' Status der Zelle innerhalb von Millisekunden auf YES und kurz danach auf NO.

    Hat hier eventuell noch jemand Rat, wodurch dieses Verhalten hervor gerufen werden könnte?
  • macmoonshine schrieb:

    Hast du mal einen Breakpoint in die Deleselect-Delegate-Methoden und tableView:cellForRowAtIndexPath: gesetzt? Damit sollte sich der Schurke doch finden lassen. ;)
    Die didDeselect wird gar nicht aufgerufen, und die cellForRow nur zwei mal (bei zwei Einträgen in der Liste), was mir ebenfalls korrekt vorkommt.

    Nachtrag: die willDeselect ebenfalls nicht.
  • Hallo,

    da bin ich mir unsicher, aber das iOS bietet das Zusammenklappen nicht standardmäßig.
    Richtig!?

    D.h. Du hast das HeaderView mit einem Button versehen, der dann die Gruppe ausblendet.
    Konsequenterweise wirst Du für diese Gruppe die Anzahl Zeilen von 0 zurückgeben.

    Da stimmt irgendwas mit den Offsests nicht, wenn Du die Gruppen "gefaltet" hast.

    Teste doch mal die Selektion immer nach und vor der geklappten Gruppe.
    Wenn es davor immer funktioniert, dann ist es ein Offset-Rechenfehler irgendwo.

    Viele Grüße
  • schumi schrieb:

    Es könnte mit dequeReuseable von Zellen zusammenhängen, da sich noch andere TableViewCell im Speicher befinden und diese wieder verwendet werden. Wird der Select-Status jedes mal neu gesetzt ??
    Zum dequeReusable => Ich verwende an der stelle aktuell noch eine XIB Datei und lade mir somit die zelle aus dem Xib. Mit dem folgenden Code werden die Zellen erstellt.

    C-Quellcode

    1. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    2. {
    3. NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MeineTolleZelle" owner:self options:nil];
    4. ZellKlasse *cell = [topLevelObjects objectAtIndex:0];
    5. NSArray *information = [[array objectAtIndex:indexPath.section] data][indexPath.row];
    6. [cell setName:information[1] lastChanged:information[2] created:information[4]];
    7. return cell;
    8. }
    Alles anzeigen
    Ich habe aber für mich beschlossen,d ass ich das ganze grundlegend überarbeiten werde, da mir der allgemeine Ablauf (ständiger Reload) nicht gefällt, aber es damals nicht besser zu lösen wusste.
  • little_pixel schrieb:

    Hallo,

    da bin ich mir unsicher, aber das iOS bietet das Zusammenklappen nicht standardmäßig.
    Richtig!?

    D.h. Du hast das HeaderView mit einem Button versehen, der dann die Gruppe ausblendet.
    Konsequenterweise wirst Du für diese Gruppe die Anzahl Zeilen von 0 zurückgeben.

    Da stimmt irgendwas mit den Offsests nicht, wenn Du die Gruppen "gefaltet" hast.

    Teste doch mal die Selektion immer nach und vor der geklappten Gruppe.
    Wenn es davor immer funktioniert, dann ist es ein Offset-Rechenfehler irgendwo.

    Viele Grüße
    Was genau meinst du mit dem Offset? Das komische ist ja, dass die Markierung da ist. Für einen Bruchteil einer Sekunde aber nur...

    nachtrag: Völlig korrekt, das Falten/Ausfalten läuft über einen Knopf im Header-View und je nach Status wird eine Zeilenzahl von 0 zurückgegeben.