Comment créer une application Menubar pour Mac

175

EDIT: Ceci est une belle application de barre de menus prête à l'emploi ici ( source github ) par cette réponse .


Je me demandais comment créer une application de barre de menus, quelles sont les conditions requises pour cela?

J'ai vu qu'une application simple pour la barre de menus consistait à ouvrir des liens à l'aide de votre navigateur, je veux créer quelque chose de similaire.

entrez la description de l'image ici

C'est l'application que j'aime faire similaire.

MacMac
la source
4
Voici un tutoriel simple .
NSRover

Réponses:

133

NSStatusItem est ce que vous recherchez. Ajoutez également LSUIElement avec une valeur de chaîne de 1 à votre Info.plist pour le masquer de Dock.

SteamTrout
la source
14
mactech.com/articles/mactech/Vol.22/22.02/Menulet - voici un exemple de code avec quelques explications.
SteamTrout
2
Vous pouvez consulter un de mes projets GitHug pour un exemple: github.com/nippysaurus/WeatherRock/blob/master/…
Nippysaurus
3
J'ai implémenté l'exemple décrit dans le lien SteamTrout et l'ai mis sur github. C'est ici: github.com/wanderingstan/IPMenuletExample
Stan James
Bonjour Steam Trout, merci pour votre aide ... mais comment pouvons-nous garder notre raccourci d'application toujours dans la barre de menu, jusqu'à ce que l'utilisateur désinstalle l'application ... toute aide .... stackoverflow.com/questions/23605687/…
VSN
66

J'ai trouvé que le Popup de Codebox était un excellent point de départ. Il est mûr pour forking sur Github.

entrez la description de l'image ici

Bien que cela fonctionne bien, ils notent sur leur site ...

PS Dans Lion, Apple ajoute une nouvelle classe pour les popovers comme dans iOS. Ainsi, après la sortie d'OS X 10.7, vous feriez mieux de vous fier aux classes Cocoa natives lorsque cela est possible. Dans d'autres cas, le projet Popup doit toujours être utilisable.

Alex Gray
la source
3
Ce n'est en aucun cas vrai. NSPopover a de sérieuses limitations: les champs de texte / vues ne peuvent pas devenir le premier répondeur et vous ne pouvez donc pas saisir de texte.
Christian Kienle
@ChristianKienle alors recommanderiez-vous toujours de commencer avec l'application Popup avec les versions OS X> 10.7?
fatuhoku
Oui. Les éléments de statut NSPopover + ont de sérieuses limitations dans les versions 10.7 et 10.8. Par exemple, la capture d'écran ci-dessus montre un champ de recherche. En utilisant un NSPopover, vous ne pouvez pas interagir correctement avec le champ de recherche.
Christian Kienle
1
Pourquoi l'exemple Popup de Codebox a-t-il un BackgroundPanel si compliqué?
rbp
13

BitBar est une application sur GitHub qui peut «mettre n'importe quoi dans la barre de menus de votre Mac OS X».

Il exécute le shell ou d'autres scripts exécutables (qu'il appelle Plugins - voir les nombreux exemples dans le repo des plugins ) et affiche les résultats dans la barre de menus. Vous pouvez écrire votre propre plugin et le faire exécuter simplement en l'ajoutant au «dossier Plugins». En plus d'afficher des informations, il peut également exécuter des scripts bash prédéfinis de manière interactive à partir des menus du plugin que vous définissez.

Depuis que j'ai publié cette réponse pour la première fois, sa popularité a explosé (52 contributeurs actuellement) et il existe même une version distribuable avec laquelle vous pouvez empaqueter vos propres plugins.

Un exemple très simple (non interactif) pour afficher le prix Bitcoin en direct:

entrez la description de l'image ici

MatzFan
la source
4
merci à cwd d' avoir amélioré ma réponse originale plutôt médiocre
MatzFan
10

Comme Apple a ajouté une NSStatusBarButtonpropriété à NSStatusItemYosemite, nous pouvons implémenter l'application de la barre de menus beaucoup plus simplement. Je viens de créer un exemple de projet sur github.

https://github.com/taichino/PopupTest

taichino
la source
Merci d'avoir mis cela ensemble!
cwd le
2

FlyCut est une autre belle application open source qui fait cela. (Licence MIT.) Très pratique aussi, je l'utilise plusieurs fois par jour.

Voici un code qui semble pertinent:

    // Flycut/AppController.h
    IBOutlet NSMenu *jcMenu;

    // Flycut/AppController.m
    statusItem = [[[NSStatusBar systemStatusBar]
            statusItemWithLength:NSVariableStatusItemLength] retain];
    [statusItem setHighlightMode:YES];

    if ( [[DBUserDefaults standardUserDefaults] integerForKey:@"menuIcon"] == 1 ) {
        [statusItem setTitle:[NSString stringWithFormat:@"%C",0x2704]]; 
    } else if ( [[DBUserDefaults standardUserDefaults] integerForKey:@"menuIcon"] == 2 ) {
        [statusItem setTitle:[NSString stringWithFormat:@"%C",0x2702]]; 
    } else {
        [statusItem setImage:[NSImage imageNamed:@"com.generalarcade.flycut.16.png"]];
    }
    [statusItem setMenu:jcMenu];
    [statusItem setEnabled:YES];
funroll
la source
Salut funroll, je voudrais garder ce raccourci toujours dans la barre de menu comme le contrôle de valume par défaut dans mac est-il possible avec la programmation ... s'il vous plaît aidez-moi !!!
VSN
Les commentaires @VSN StackOverflow ne sont pas un bon endroit pour demander de l'aide comme celle-ci. Je suggérerais de lire Comment poser une bonne question .
funroll
J'ai posé une nouvelle question - toute aide là-bas .... stackoverflow.com/questions/23605687/…
VSN
0

Mail Notifr est une autre application open source Menubar. Cela m'a beaucoup aidé, surtout quand j'avais besoin de comprendre comment implémenter l'ouverture à la connexion. Également disponible sur l' App Store .

renard lindon
la source