Trennlinien-Frust

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

  • Trennlinien-Frust

    ‘n Abend!

    Ich muss mir mal den Frust von der Seele schreiben:

    Ihr erinnert Euch vielleicht an die „tollen“ Seiteneffekte, die ich mit dem UISearchController in Verbindung mit nicht-transparenter UINavigationBar hatte (Link)? Oder an den contentOffset einer UITableView, der sich bei variablen Zeilenhöhen ändert (Link)? Heute Nachmittag hatte ich Spass mit den Trennlinien einer UITableView ... aber der Reihe nach:

    Ich möchte, das eine selektierte Zelle keine andere Hintergrundfarbe erhält, sonder die Textfarbe verändert wird. Trotzdem muss ich UITableViewCellSelectionStyleDefault verwenden, damit weiterhin auf Selektionen reagiert wird. Also setze ich eine selectedBackgroundView mit entsprechender Farbe. Von diesem Moment an werden die Trennlinien bei selektierten Zellen nicht mehr angezeigt, auf SO gibt es viele Hacks dazu, aber keine saubere Lösung.

    Letzlich werden die Alphawerte der entsprechenden Subviews („_UITableViewCellSeparatorView") auf 0 gesetzt. Ein Ändern ist nicht so leicht, da deren Anzeigen von der Position der Zelle abhängig ist und bei Selektion auch die Zelle oberhalb geändert werden muss.

    Ich habe nun 5h verschiedenste Ansätze ausprobiert, alle erscheinen mir irgendwie hacky und ich habe nun einfach alle Trennlinien ausgeblendet, damit die Anzeige wenigstens konsistent ist. Vielleicht lasse ich auch die selectedBackgroundView weg und lebe mit dem grauen Hintergrund.

    Auf jeden Fall wieder ein Beispiel, wo etwas nicht funktioniert, obwohl das Verfahren so dokumentiert ist. Da es nicht dem „normalen“ Standardverhalten von Apple entspricht, wurde es wohl nicht getestet ... und der Effekt besteht angeblich seit iOS 7!

    Ein Nachmittag für‘n A... und keine zufriedenstellende Lösung. Ich krieg jetzt ein Bier :cursing:

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Du wirst lachen: Ich reagiere eh schon selber mit einem UIGestureRecognizer und nutze eigentlich nur das Highlighting von der Selection.

    Daher hatte ich vor 10 Minuten den gleichen Gedanken (ehrlich!) und werde morgen mit UITableViewCellSelectionStyleNone weitermachen. Ich denke auch, das ist der beste Weg.

    Danke, Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Hast Du mit einer Custom UITableViewCell mal getestet, ob setSelected:animated: und/oder setHighlighted:animated: auch bei UITableViewCellSelectionStyleNone aufgerufen wird?

    Ich glaube das Problem mit dem selectedBackgroundView und dem dabei verschwindenden Separator hatte ich auch schon mal. Hast Du mal probiert einen selectedBackgroundView mit clearColor oder alpha = 0 zu verwenden?
  • MCDan schrieb:

    Ich glaube das Problem mit dem selectedBackgroundView und dem dabei verschwindenden Separator hatte ich auch schon mal. Hast Du mal probiert einen selectedBackgroundView mit clearColor oder alpha = 0 zu verwenden?
    Ja, die selectedBackgroundView hat bei mir die clearColor als backgroundColor.

    Eine Custom UITableViewCell ist mein nächster Ansatz, ich wollten zunächst in layoutSubviews den Hack der _UITableViewCellSeparatorView einbauen ... bis er mir angesichts der Unterscheidung je nach Lage der Zeile und auch allgemein zu dirty erschien. Insofern keine Ahnung, ob die von Dir genannten Methoden getriggert werden. Wenn ich nachher auf UITableViewCellSelectionStyleNone umbaue, werde ich es testen (bzw. die Methoden zum Setzen der Textfarbe verwenden) und mich melden. Danke für den Hinweis!

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.

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

  • Danke Euch, Jungs!

    Ich habe nun ganz einfach für die Zellen cell.selectionStyle = UITableViewCellSelectionStyleNone; gesetzt. Als Konsequenz wird tableView:didSelectRowAtIndexPath: nicht mehr aufgerufen, was mich aber nicht stört, da ich Taps eh per UIGestureRecognizer verarbeite.

    Um nun den Text selektierter Zeilen farblich hervorzuheben (und wieder zurückzusetzen), habe ich eine Custom UITableViewCell erstellt, die nur die von @MCDan genannte setSelected:animated:-Methode überschreibt:

    Quellcode

    1. - (void)setSelected:(BOOL)selected animated:(BOOL)animated
    2. {
    3. DebugLog(@"Cell: %@, selected: %i, animated: %i", self, selected, animated);
    4. self.textLabel.textColor = selected ? ((STBAppDelegate *)[UIApplication sharedApplication].delegate).styleColor : [UIColor blackColor];
    5. [super setSelected:selected animated:animated];
    6. }
    Das ist m. E. super clean, macht genau was ich will und ich bin happy.

    Bleibst nur die Frage, welches Brett ich gestern 5h lang vor'm Kopf hatte: Echt immer in die falsche Richtung ("Wie bekomme ich die Linien sichtbar") gerannt ... aber egal! :D

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.