176 votes

Comment créer une application Menubar pour Mac

EDIT : Voici une belle application de menubar prête à l'emploi. aquí ( source github ) par ce réponse .


Je me demandais comment réaliser une application de type menubar, quelles sont les conditions requises pour ce faire ?

J'ai vu une application simple pour la menubar était d'ouvrir des liens en utilisant votre navigateur, je veux créer quelque chose de similaire à cela.

enter image description here

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

4 votes

Voici un simple tutoriel .

133voto

SteamTrout Points 1255

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

14 votes

mactech.com/articles/mactech/Vol.22/22.02/Menulet - Voici un exemple de code avec quelques explications.

2 votes

Vous pouvez consulter l'un de mes projets GitHug à titre d'exemple : github.com/nippysaurus/WeatherRock/blob/master/

3 votes

J'ai implémenté l'exemple décrit dans le lien de SteamTrout et l'ai mis sur github. Il est ici : github.com/wanderingstan/IPMenuletExample

66voto

alex gray Points 5089

J'ai trouvé Popup de la boîte à codes pour être un bon point de départ. Il est mûr pour forking sur Github.

enter image description here

Bien qu'il fonctionne bien, ils notent sur leur site...

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

3 votes

Ce n'est pas vrai dans tous les cas. NSPopover a de sérieuses limitations : Les champs de texte/vues ne peuvent pas devenir le premier répondant et vous ne pouvez donc pas entrer de texte.

0 votes

@ChristianKienle alors recommanderiez-vous toujours de commencer avec l'application Popup avec des versions d'OS X > 10.7 ?

0 votes

Oui. NSPopover + Status Item ont de sérieuses limitations dans 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.

14voto

MatzFan Points 452

BitBar est une application sur GitHub qui peut "mettre n'importe quoi dans votre barre de menu Mac OS X".

Il exécute des scripts shell ou 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 menu. Vous pouvez écrire votre propre plugin et le faire fonctionner 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 de plugins que vous définissez.

Depuis que j'ai posté cette réponse, sa popularité a augmenté. éclaté (52 contributeurs actuellement) et il existe même maintenant une version distribuable avec laquelle vous pouvez empaqueter vos propres plugins.

Un exemple très simple (non interactif) pour montrer le prix du bitcoin en direct :

enter image description here

4 votes

Grâce à cwd pour avoir amélioré ma réponse originale plutôt médiocre

10voto

taichino Points 305

Comme Apple l'a ajouté NSStatusBarButton à la propriété NSStatusItem dans Yosemite, nous pouvons mettre en œuvre une application menubar beaucoup plus simple. Je viens de créer un projet d'exemple sur github.

https://github.com/taichino/PopupTest

0 votes

Merci d'avoir mis tout ça en place !

2voto

funroll Points 4014

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 être 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];

0 votes

Salut funroll, je voudrais garder ce raccourci toujours dans la barre de menu comme la commande de valume par défaut dans le mac est ce possible avec la programmation ... s'il vous plaît aidez-moi !!!

0 votes

@VSN Les commentaires de StackOverflow ne sont pas un bon endroit pour demander de l'aide comme celle-ci. Je vous suggère de lire Comment poser une bonne question .

0 votes

J'ai posé une nouvelle question - une aide quelconque .... stackoverflow.com/questions/23605687/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X