/ / NSMenu in der benutzerdefinierten NSView-Klasse für NSStatusItem wird am unteren Rand der Statusleiste nicht angezeigt - Ziel-c, Macos, Kakao

NSMenu in der benutzerdefinierten NSView-Klasse für NSStatusItem wird nicht am Ende der Statusleiste angezeigt - objective-c, macos, cacao

Ich habe eine benutzerdefinierte Ansichtsklasse erstellt, weil ich ein Statuselement haben wollte, zu dem Sie Elemente ziehen können.

Hier ist die Definition der Ansicht:

@interface DragStatusView : NSImageView <NSMenuDelegate>{
BOOL highlight;
}
@end

In meiner ApplicationDelegate.m Ich instanziiere ein NSStatusItem und eine Instanz von DragStatusView. Ich habe das Bild in der DragStatusView festgelegt und sein Menü auf eine Instanz von NSMenu festgelegt, die einige NSMenuItems enthält.

- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
// Install icon into the menu bar
statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain];

NSImage *statusImage = [NSImage imageNamed:@"Status"];
[statusItem setImage:statusImage];




[menuItem setTitle:NSLocalizedString(@"Special Status", @"imgur menu item text")];
CGFloat itemHeight = [[NSStatusBar systemStatusBar] thickness];
NSRect itemRect = NSMakeRect(0.0, 0.0, NSSquareStatusItemLength, itemHeight);

DragStatusView* dragView = [[DragStatusView alloc] initWithFrame:itemRect];
[dragView retain];

[dragView setImage:statusImage];
[dragView setMenu:menu];

[statusItem setHighlightMode:YES];
[statusItem setView:dragView];
}

Hier ist die Methode im DragStatusView-Controller, die das Popup-Menü auslöst:

- (void)mouseDown:(NSEvent *)event {
[[[NSApp delegate] statusItem] popUpStatusItemMenu:[self menu]]; // or another method that returns a menu
}

Dies funktioniert meistens, aber das Menü erscheint zu hoch, wenn Sie auf den Statuspunkt klicken.

Wie es vor dem Klick aussieht: http://imgur.com/fpJcd,quS3c#1

Wie es nach dem Klicken aussieht: http://imgur.com/fpJcd,quS3c#0 (Das Menü erscheint oben auf dem Bildschirm - ahh!)

Wie kann ich das Menü unten in der Statusleiste anzeigen lassen?

Vielen Dank!

Antworten:

1 für die Antwort № 1

Wie öffnet sich das Menü? Was Sie wollen, ist etwa so:

- (void)mouseDown:(NSEvent *)event {
[statusItem popUpStatusItemMenu:[self menu]];
}

Natürlich benötigt Ihre Ansicht dann einen Verweis auf das Statuselement.


1 für die Antwort № 2

Endlich hat es funktioniert.

Code kann hier eingesehen werden:

https://github.com/zbuc/imgurBar/blob/master/imgur/ApplicationDelegate.m https://github.com/zbuc/imgurBar/blob/master/imgur/StatusItemView.m

Ich bin nicht ganz sicher, warum dieser Code funktioniert, was mich unbequem macht. Er macht die Dinge mit den Bounding-Rekten etwas anders, aber ich sehe nicht, was genau jetzt funktioniert.