/ / NSMenu dans la classe NSView personnalisée pour NSStatusItem n'apparaissant pas au bas de la barre d'état - objective-c, macos, cacao

NSMenu dans la classe NSView personnalisée pour NSStatusItem n'apparaissant pas au bas de la barre d'état - objective-c, macos, cacao

J'ai créé une classe d'affichage personnalisée parce que je voulais avoir un élément d'état dans lequel vous pouvez faire glisser des éléments.

Voici la définition de la vue:

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

Dans mon applicationDelegate.m J'instancie un NSStatusItem et une instance de DragStatusView. J'ai défini l'image sur DragStatusView, ainsi que son menu pour une instance de NSMenu contenant quelques éléments NSMenu.

- (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];
}

Voici la méthode dans le contrôleur DragStatusView qui déclenche l'affichage du menu:

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

Cela fonctionne généralement, mais le menu apparaît trop haut lorsque vous cliquez sur l'élément d'état.

A quoi ça ressemble avant de cliquer: http://imgur.com/fpJcd,quS3c#1

A quoi ça ressemble après avoir cliqué: http://imgur.com/fpJcd,quS3c#0 (le menu apparaît en haut de l'écran - ahh!)

Comment faire pour que le menu apparaisse au bas de la barre d'état?

Merci!

Réponses:

1 pour la réponse № 1

Comment ouvrez-vous le menu? Ce que vous voulez faire est quelque chose comme ça:

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

Bien entendu, votre vue nécessitera une référence à l'élément d'état.


1 pour la réponse № 2

Enfin réussi à le faire fonctionner.

Le code peut être vu ici:

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

Je ne suis pas tout à fait sûr de savoir pourquoi ce code fonctionne bien, ce qui me met mal à l'aise. Il fait les choses légèrement différemment, mais je ne vois pas ce qui fait exactement ce travail maintenant.