Wie zeichne ich beim Zeichnen manuell eine Nspopupbuttoncell (zeichne sie mit Weiß statt schwarz)?

StackOverflow https://stackoverflow.com/questions/1162414

Frage

Ich habe eine benutzerdefinierte Zelle, die aus mehreren Zellen besteht, von denen eines ein Nspopupbuttonzell ist.

Wenn ich meine benutzerdefinierte Zelle hervorhebt, möchte ich auch alle Unterzellen hervorheben (normalerweise durch weißes Wenden).

Mit zum Beispiel einer nStextcell, wenn ich rufe setHighlighted:YES voranrufen drawWithFrame:inView Die Zelle wird mit weißem Text gezeichnet, genau so wie ich es möchte.

Dies funktioniert nicht mit Nspopupbuttoncells. Der Text zeichnet einfach weiter als schwarz.

Es scheint, dass dies möglich sein sollte, da ein NSPOPUPBUTTONCELL in ein NStableView -Highlights ordnungsgemäß fallen wird.

Kann mich jemand in die richtige Richtung zeigen, um dies zu beheben?

War es hilfreich?

Lösung

Wo hosten Sie diese benutzerdefinierte+zusammengesetzte Nscell -Unterklasse?

-Sethighlight: Ja ist nicht das, wonach Sie suchen. Aus der Dokumentation:

Standardmäßig tut diese Methode nichts. Die NSButtonCell -Klasse überschreibt diese Methode, um die Taste mit dem von NscellLightsBackground, NscellLightsByContents oder NscellLightsByGray angegebenen Erscheinungsbild zu zeichnen.

In der Regel setzt die Hostansicht für eine Zelle den Hintergrundstil der Zelle, und die Zelle verwendet diese zum Ziehenzeit, um sich angemessen anzuzeigen. Propagieren Sie den Hintergrundstil von der Master-Zelle zu den Unterzellen.

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
    NSRect textRect, popUpRect;
    NSDivideRect(cellFrame, &textRect, &popUpRect, NSWidth(cellFrame) / 2, NSMinXEdge);

    /* Draw the text cell (self) */
    [super drawInteriorWithFrame: textRect inView: controlView];

    /* Draw our compound popup cell - create & release every time drawn only in example */
    NSPopUpButtonCell *popUpCell = [[NSPopUpButtonCell alloc] initTextCell: @"popup title"];
    [popUpCell setBordered: NO];
    [popUpCell setBackgroundStyle: [self backgroundStyle]];
    [popUpCell drawWithFrame: popUpRect inView: controlView];
    [popUpCell release];
}

Wenn Sie diese zusammengesetzte Zelle in einem NstableView hosten, sollte dies ausreichen, um den richtigen Hintergrund für ausgewählte Zeilen zu erhalten.

Wenn Sie dies in Ihrer eigenen Ansicht veranstalten, müssen Sie möglicherweise zusätzliche Arbeiten erledigen. (Und müssen zusätzliche Details zur Hostumgebung angeben, bevor wir Ratschläge anbieten können.)

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