Popup-Menü Umsetzung von NSButton
Wie sollte ich über gehen es?
War ich denken...
[NSMenu popUpContextMenu:menu withEvent:event forView:(NSButton *)sender];
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie sollte ich über gehen es?
War ich denken...
[NSMenu popUpContextMenu:menu withEvent:event forView:(NSButton *)sender];
Du musst angemeldet sein, um einen Kommentar abzugeben.
Yup.
Auf die button-Aktion rufen
wo
menu
: Menü, das Sie wollen, um zu zeigen,sender
: Schaltfläche, die Sie geklicktevent
: eine neueNSEvent
Sie erstellenBeim erstellen der neuen
NSEvent
, geben Sie den Speicherort, wo Sie wollen das popup-Menü angezeigt werden.-[NSMenu popUp:...]
anstelle der Klasse Methode. Auf diese Weise, es wird relativ positioniert, um Ihre Schaltfläche, selbst wenn Sie eine Tastenkombination dafür.Swift version von akzeptierten Antworten
Als ich kommentiert habe, finde ich die ButtonMadness Beispiel weniger als perfekt.
Meine Implementierung scheint, besser zu arbeiten. Das Menü wird angezeigt Maus nach unten, die Taste gedrückt bleibt ganz, die Menü-position angegeben werden kann und das Menü geschlossen wird, ohne nachfolgende unechten Anzeige.
Um ehrlich zu sein NSPopupButton ist eine bessere Wahl in den meisten Situationen. Ich habe diesen code verwenden, vor allem, weil der Komfort, dass eine Klasse für buttons und popups, und da Sie im Menü nicht enthalten ist die popup-Kontrolle Bild und Titel. Ich lade das Menü von einer separaten Feder auf und verwenden es wie ist an anderer Stelle in der app erforderlich.
Beachten Sie, dass es einfach ist, um zusätzliche Unterstützung für sagen, ein popover sowie Menüs.
Vor kurzem, ich habe versucht es zu implementieren, und ich kam, wie ich denke, mit einer einfacheren Lösung
Update
convertBaseToScreen
veraltet ist ab 10.7, anstatt es verwendenconvertRectToScreen
in der folgenden Weise:NSPoint point = [[self.view window] convertRectToScreen:((NSButton*)sender).frame].origin;
irgendeine Idee?Über ein Kontextmenü auf die Aktion, der Aufruf ist kein guter Weg, es zu tun, weil das Menü nicht zeigen, bis mouseUp - Sie nicht bekommen, die halten & drag im Menü Verhalten. Apple ButtonMadness Beispiel zeigt, wie wirklich, dies zu tun in einer Unterklasse von NSButton, siehe dropdownbutton fest. https://developer.apple.com/library/mac/samplecode/ButtonMadness/Introduction/Intro.html
Zusammenfassen, dass die Unterklasse: erstellen Sie eine NSPopUpButtonCell mit pullsDown auf JA gesetzt & preferredEdge zu NSMaxYEdge, kopieren Sie Ihrem Menü hinzufügen, um eine leere top-Element und legen Sie es als das cell-Menü auf mouseDown-call [thePopUpCell performClickWithFrame:selbst.bounds inView:self] und legen Sie selbst.needsDisplay
Machen, wie das.