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 № 1Comment 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.