Frage

In meiner app habe ich ein UITableViewCell der verwendet wird, eine Hintergrundfarbe Einstellung anzuzeigen. Im detailTextLabel, zeigt es den Namen der Farbe mit dem Hintergrund Satz zu der tatsächlichen Farbe, z.B. [UIColor cyanColor]. Beachten Sie, dass ich den Hintergrund der detailTextLabel nur setze, nicht die ganze UITableViewCell. Wenn Benutzer tippen Sie auf die Zelle sie in einen anderen UITableView genommen werden, die ihnen eine Farbe wählen können, und wenn sie die Backgroundcolor des UILabel zum vorherigen UITableView zurückkehren wird auf die neue Farbe aktualisiert.

Das Problem ist, wenn ich auf die ursprüngliche UITableView zurückkehren, aktualisiert die UILabel die Backgroundcolor kurz und dann wieder in den Anfangsfarbe. Ich kann nicht herausfinden, warum es zurückkehrt werden. Irgendwelche Vorschläge?

Danke!

War es hilfreich?

Lösung

Einige zustandsbasierte Eigenschaften werden durch die Tabellen-Ansicht eingestellt; Ich glaube, dass die Hintergrundfarbe einer von ihnen ist. Mit anderen Worten, wird die Tabellenansicht Änderung der Hintergrundfarbe von detailTextLabel, wahrscheinlich als Teil der Auswahl von unhighlighting.

Nachdem die Tabellenansicht zustandsbasierte Eigenschaften festlegt, werden die Tabelle Delegierten eine letzte Chance gegeben das Aussehen jeder Zelle zu aktualisieren. Dies wird in den Delegierten tableView:willDisplayCell:forRowAtIndexPath: Methode. Vielleicht, wenn Sie die Hintergrundfarbe von detailTextLabel in dieser Methode das Problem gesetzt wird weggehen.

Andere Tipps

Wenn cellForRowAtIndexPath ausgeführt wird, erstellt es normalerweise und gibt eine neue Zelle.

Aus Ihrer Frage, es ist unklar, ob Sie die Zelle oder nicht neu erstellen, aber wenn Sie sind, diese das Verhalten erklären könnten Sie beschreiben.

Yes..Maybe Sie nicht Ihre Zellen in cellForRowAtIndexPath Methode wiederverwenden. Wenn ja, versuchen Sie, Ihre Zellen wieder zu verwenden, anstatt neues, jedes Mal zu schaffen.

Die Art und Weise, dass ich dieses Problem behoben war ein UILabel Unterklasse genannt HighlightedLabel zu erstellen, die die folgenden initialiser haben:

- (id)initWithHighlightedBackgroundColor:(UIColor *)highlightedBackgroundColor nonHiglightedBackgroundColor:(UIColor *)nonHighlightedBackgroundColor
    {
        self = [super init];
        if(self)
        {
            _highlightedBackgroundColor = highlightedBackgroundColor;
            _nonHighlightedBackgroundColor = nonHighlightedBackgroundColor;
            self.backgroundColor = nonHighlightedBackgroundColor;
        }
        return self;
    }


    -(void)setHighlighted:(BOOL)highlighted
    {
        if(highlighted)
        {
            self.backgroundColor = self.highlightedBackgroundColor;
        }
        else
        {
            self.backgroundColor = self.nonHighlightedBackgroundColor;
        }
    }

Dann, wenn ich diese Zelle zuweisen angeben ich die markierte und nicht-markierte Hintergrundfarbe.

Das funktioniert perfekt -. Wenn ich die Zelle wählen die Farbe ist, was ich will

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top