2017-02-01 3 views
0

Ich möchte eine NSMenu mit mehreren NSMenuItem s darin haben. Diese Elemente verhalten sich wie "normal" NSMenuItem s, mit einer Ausnahme: Ich würde gerne die Inhalte (d. H. Die "Vordergrund") jedes Elements auf eigene Faust zeichnen.Einfache Möglichkeit, benutzerdefinierte NSMenuItem-Ansichten zu implementieren

Das heißt:

  • I das Betriebssystem möchte die blaue Markierung zu zeichnen, wenn ich mit der Maus bewegen, um das Häkchen oder Strich ziehen (um anzuzeigen, „ausgewählt“/"Teil von Multi -Auswahl"). Außerdem möchte ich "normales", d. H. Menü-eingebautes Maus/Tastatur-Verhalten.

  • Ich mag die „Inhalte“ ich ziehen: Im Idealfall würde ich mir vorstellen, dass ich hätte implementieren/außer Kraft setzt eine einzige Methode drawMenuItem:withCGContext:inRectangle:withTextColor, die im Grunde das Element erhält, das CGContext in ziehen, die NSRect der Artikel und die Textfarbe , die von Mac OS verwendet werden würde, wenn es das Element selbst gezeichnet.

Ich weiß (sehr stronlgy vermuten), dass mein Wunsch, wahrscheinlich zu viel ist, aber ich würde mit etwas angemessen völlig in Ordnung sein (zB ich die NSRect vom NSMenuItem holen mir vorstellen könnte, den Erhalt der Farbe etwas mit wie [NSColor selectedMenuItemTextColor], und der Kontext mit etwas wie [NSContext currentContext]).

Natürlich dachte ich Apple's instruction on this. Dies verhindert jedoch, dass das Menü den Hintergrund der blauen Hervorhebung und das Häkchen zeichnet. Soweit ich sehen konnte, würde ich z. mouseUp ich selbst.

Um es zusammenzufassen: Gibt es eine Möglichkeit, ein (fast) voll funktionsfähiges Menü zu bekommen, in dem ich nur den Inhalt anpasse, wo normalerweise der Titel des Menüpunktes steht (möglicherweise sogar ohne benutzerdefinierte Ansichten)?

+0

Können Sie das Bild des Menüelements nicht einstellen? – Willeke

+0

@Willeke Ich dachte darüber nach, war aber etwas zögerlich, da ich jetzt weiß, ob das für das Bild ursprünglich gedacht war. Außerdem war ich nicht sicher, ob es einfach ist, die Vordergrundfarbe dynamisch zu ändern, basierend auf dem "Highlight" -Zustand des "NSMenuItem". – phimuemue

Antwort

2

Die Antwort lautet: Nein.

Da Sie die gesamte Ansicht des Menüpunktes ersetzen Sie für die Erstellung verantwortlich sind und die Ereignisse zu verarbeiten.

+0

Ihre Antwort ist wahrscheinlich wahr. Aber könnte es nicht sein, dass ich möglicherweise gar keine benutzerdefinierte Ansicht verwenden muss? Ich hatte gehofft, dass es eine Technik gibt, vielleicht ohne eine benutzerdefinierte Ansicht, um zu erreichen, wonach ich suche. – phimuemue

+0

Leider erbt 'NSMenuItem' von' NSObject', so dass keine (öffentliche) View-bezogene API überschrieben werden muss. – vadian

+0

Wahr, und ich habe in der View-Hierarchie Debugger beobachtet, dass ein 'NSMenu' mit Plain-Vanilla-Items keine Subviews für jedes Element enthält, sondern stattdessen alles im' NSView' des gesamten Menüs zu zeichnen scheint. Also dachte ich mir: "Vielleicht könnte ich diese Unterklasse ..." – phimuemue

Verwandte Themen