2010-12-28 7 views
0

Ich benutze eine UIButton, um eine Tabelle-Zelle-Element von lesen bis ungelesen anzuzeigen und umzuschalten. Ich habe ein blaues Bild als Hintergrund verwendet, um anzuzeigen, wenn ein Element ungelesen war, und das hat funktioniert, aber ich dachte mir, dass es besser wäre, die setHighlighted Funktion zu verwenden, da das Hinzufügen eines zusätzlichen Bildes zur App erspart wird. Der Code, den ich verwende, ist wie folgt:Ändern Sie die SetHighlighted für UIButton

- (void)updateReadButton{ 
    if(article.read.boolValue){ 
     //[readButton setBackgroundImage:nil forState:UIControlStateNormal]; 
     [readButton setHighlighted:FALSE]; 
     [readButton setNeedsLayout]; 
    } else { 
     [readButton setHighlighted:TRUE]; 
     [readButton setNeedsLayout];   
    } 
} 

Dies funktioniert gut für die erste Erstellung der Zelle. Aber wenn auf das Element geklickt wird und die Detailansicht angezeigt wird, schalte ich den 'read' Wert auf 'true' und ändere die setHighlighted Option von der UIButton in der Zelle auf false, aber es ändert sich nicht, wenn ich vom Detail zurückkomme Aussicht. Nur wenn die Zelle vom Bildschirm scrollt und neu erstellt wird, wird die Änderung reflektiert. Wie kann ich eine Neuzeichnung der Schaltfläche erzwingen, wenn ich zur Detailansicht navigiere?

+0

Haben Sie 'setNeedsDisplay' anstelle von' setNeedsLayout' probiert? –

+0

Ja, und beide scheinen nicht zu funktionieren. Ich nehme an, ich rufe es auf dem UIButton selbst an? –

Antwort

1

Sie können die Hervorhebung möglicherweise durchführen, indem Sie die betreffende Zelle einfach neu laden. Betrachten Sie UITableView - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation und verwenden Sie es, um die Zelle neu zu laden, nachdem Sie die Hervorhebung gesetzt haben.

+0

Das scheint der Trick zu sein! –

1

Ich glaube nicht, dass die Methode setHighlighted: die richtige ist. Hier ist die Dokumentation:

Geben Sie JA, wenn das Steuerelement markiert ist; sonst NEIN.

Standardmäßig ist ein Steuerelement nicht hervorgehoben. UIControl automatisch setzt und löscht diesen Zustand automatisch, wenn eine Berührung eintritt und während der Verfolgung beendet und wenn dort ist ein Nachschlag.

+0

Das macht Sinn, obwohl es bei mir mit der obigen Lösung zu funktionieren scheint. Ich könnte es verlassen, wenn es nicht in Zukunft Komplikationen gibt, wie es meinem Zweck entspricht. –

Verwandte Themen