Come creare un'applicazione della barra dei menu per Mac


175

EDIT: Questa è una bella applicazione di barra dei menu già pronta qui ( fonte github ) con questa risposta .


Mi chiedevo come fare un'applicazione di barra dei menu, quali sono i requisiti per farlo?

Ho visto che una semplice applicazione per la barra dei menu era aprire i collegamenti usando il tuo browser, voglio creare qualcosa di simile a quello.

inserisci qui la descrizione dell'immagine

Questa è l'applicazione che mi piace rendere simile.


4
Ecco un semplice tutorial .
NSRover,

Risposte:


133

NSStatusItem è ciò che stai cercando. Aggiungi anche LSUIElement con valore stringa 1 a Info.plist per nasconderlo dal Dock.


14
mactech.com/articles/mactech/Vol.22/22.02/Menulet - ecco un codice di esempio con alcune spiegazioni.
SteamTrout il

2
Puoi vedere uno dei miei progetti GitHug per un esempio: github.com/nippysaurus/WeatherRock/blob/master/…
Nippysaurus

3
Ho implementato l'esempio descritto nel link di SteamTrout e l'ho messo su github. È qui: github.com/wanderingstan/IPMenuletExample
Stan James

Ciao Steam Trout, grazie per il tuo aiuto ... ma come possiamo mantenere il collegamento dell'applicazione sempre nella barra dei menu, fino a quando l'utente non disinstalla l'applicazione ... qualsiasi aiuto .... stackoverflow.com/questions/23605687/…
VSN

66

Ho scoperto che Popbox di Codebox è un ottimo punto di partenza. È maturo per biforcarsi su Github.

inserisci qui la descrizione dell'immagine

Anche se funziona bene, notano sul loro sito ...

PS In Lion, Apple sta aggiungendo una nuova classe per i popover come in iOS. Quindi, dopo il rilascio di OS X 10.7, è meglio fare affidamento sulle classi native di Cocoa dove è possibile. In altri casi, il progetto Popup dovrebbe essere ancora utilizzabile.


3
Questo non è vero in ogni caso. NSPopover ha gravi limitazioni: i campi di testo / le viste non possono diventare il primo risponditore e quindi non è possibile inserire il testo.
Christian Kienle,

@ChristianKienle quindi consiglieresti comunque di iniziare con l'applicazione Popup con versioni OS X> 10.7?
Fatuhoku,

Sì. NSPopover + Status Item ha gravi limitazioni in 10.7 e 10.8. Ad esempio lo screenshot sopra mostra un campo di ricerca. Utilizzando un NSPopover non è possibile interagire correttamente con il campo di ricerca.
Christian Kienle,

1
perché l'esempio Popup di Codebox ha un BackgroundPanel così complicato?
rbp

13

BitBar è un'applicazione su GitHub in grado di "Inserire qualsiasi cosa nella barra dei menu di Mac OS X".

Esegue shell o altri script eseguibili (che chiama Plugin - vedere i molti esempi nel repository dei plug-in ) e visualizza i risultati nella barra dei menu. Puoi scrivere il tuo plugin e farlo funzionare semplicemente aggiungendolo alla 'Cartella Plugin'. Oltre a visualizzare informazioni, può anche eseguire script bash predefiniti in modo interattivo dai menu dei plugin definiti.

Da quando ho pubblicato questa risposta per la prima volta, la sua popolarità è esplosa (52 collaboratori attualmente) e ora esiste persino una versione distribuibile con la quale puoi impacchettare i tuoi plugin.

Un esempio molto semplice (non interattivo) per mostrare il prezzo di Bitcoin dal vivo:

inserisci qui la descrizione dell'immagine


4
grazie a CWD per aver migliorato la mia risposta originale piuttosto scadente
MatzFan,

10

Poiché Apple ha aggiunto la NSStatusBarButtonproprietà a NSStatusItemYosemite, possiamo implementare l'app della barra dei menu molto più semplice. Ho appena creato un progetto di esempio su github.

https://github.com/taichino/PopupTest


Grazie per averlo messo insieme!
Cwd,

2

FlyCut è un'altra bella applicazione open source che lo fa. (Licenza MIT.) Molto utile, lo uso più volte al giorno.

Ecco un po 'di codice che sembra essere rilevante:

    // 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];

Ciao funroll, vorrei mantenere questo collegamento sempre nella barra dei menu come controllo del valore predefinito in mac è possibile con la programmazione ... per favore aiutatemi !!!
VSN,

@VSN I commenti StackOverflow non sono un buon posto per chiedere aiuto in questo modo. Suggerirei di leggere Come porre una buona domanda .
funroll

ho fatto una nuova domanda: qualsiasi aiuto lì .... stackoverflow.com/questions/23605687/…
VSN

0

Mail Notifr è un'altra app della barra dei menu open source. Mi ha aiutato un sacco, soprattutto quando avevo bisogno di capire come implementare open all'accesso. Disponibile anche su App Store .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.