Frage

Ich versuche eine Unterklasse zu bilden NSCell um eine benutzerdefinierte Hintergrundhervorhebung zu zeichnen.Die Dokumentation scheint darauf hinzudeuten, dass das Überschreiben highlight:withFrame:inView: sollte mir erlauben, dies zu tun, aber die Methode wird nie aufgerufen.

Stattdessen habe ich überschrieben drawInteriorWithFrame:inView: Das funktioniert gut – ich kann in die Zelle zeichnen, was ich will.Das Problem ist jedoch, dass ich alles selbst zeichnen muss und dabei die Funktionalität des NSCell-Typs verliere, den ich erweitere – zum Beispiel die Fähigkeit einer NSTextFieldCell, Text anzuzeigen:

Benutzerdefinierte gezeichnete hervorgehobene Zelle:

enter image description here

Ich möchte jedoch nur den Hintergrund (die Hervorhebung) neu zeichnen und die Hauptfunktionalität der erweiterten Zelle weiterhin nutzen können:

enter image description here

Ich könnte den Text natürlich auch einfach selbst zeichnen, aber ich hoffe, dass es eine einfachere Möglichkeit gibt, dies zu tun.

Jede Hilfe wird sehr geschätzt.

War es hilfreich?

Lösung

Dank der Hilfe von @Bavarous habe ich es geschafft, es herauszufinden.Meine erweiterte NSTextFieldCell-Klassenimplementierung enthält jetzt:

-(NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
    return nil;
}

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
    if ([self isHighlighted]) {
        // Draw highlight background here
    }

    [super drawInteriorWithFrame:cellFrame inView:controlView];
}

Der Schlüssel liegt darin, sicherzustellen, dass Sie zurückkehren nil für highlightColorWithFrame:inView: stoppen drawInteriorWithFrame:inView: Einen Hintergrund zeichnen und ihn dennoch aufrufen, um den Hauptinhalt (in diesem Fall Text) zu zeichnen.

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