So erstellen Sie eine Menüleistenanwendung für Mac

175

EDIT: Dies ist eine schöne vorgefertigte Menüleistenanwendung hier ( Github-Quelle ) durch diese Antwort .


Ich habe mich gefragt, wie man einen Menüleistenantrag stellt. Was sind die Voraussetzungen dafür?

Ich habe gesehen, dass eine einfache Anwendung für die Menüleiste darin bestand, Links mit Ihrem Browser zu öffnen. Ich möchte etwas Ähnliches erstellen.

Geben Sie hier die Bildbeschreibung ein

Dies ist die Anwendung, die ich gerne ähnlich mache.

MacMac
quelle
4
Hier ist ein einfaches Tutorial .
NSRover

Antworten:

133

NSStatusItem ist das, wonach Sie suchen. Fügen Sie Ihrer Info.plist auch LSUIElement mit dem Zeichenfolgenwert 1 hinzu, um es vor dem Dock auszublenden.

SteamTrout
quelle
14
mactech.com/articles/mactech/Vol.22/22.02/Menulet - hier ist ein Beispielcode mit einigen Erklärungen.
SteamTrout
2
Sie können eines meiner GitHug-Projekte als Beispiel
ansehen
3
Ich habe das im SteamTrout-Link beschriebene Beispiel implementiert und auf github gestellt. Es ist hier: github.com/wanderingstan/IPMenuletExample
Stan James
Hallo Steam Trout, danke für Ihre Hilfe ... aber wie können wir unsere Anwendungsverknüpfung immer in der Menüleiste behalten, bis der Benutzer die Anwendung deinstalliert ... jede Hilfe ... stackoverflow.com/questions/23605687/…
VSN
66

Ich habe festgestellt, dass das Popup von Codebox ein guter Ausgangspunkt ist. Es ist reif für Gabel auf Github.

Geben Sie hier die Bildbeschreibung ein

Obwohl es gut funktioniert, notieren sie auf ihrer Website ...

PS In Lion fügt Apple eine neue Klasse für Popover wie in iOS hinzu. Nach der Veröffentlichung von OS X 10.7 sollten Sie sich also besser auf native Cocoa-Klassen verlassen, wo dies möglich ist. In anderen Fällen sollte das Popup-Projekt weiterhin verwendbar sein.

Alex Gray
quelle
3
Dies ist auf keinen Fall der Fall. NSPopover weist schwerwiegende Einschränkungen auf: Textfelder / Ansichten können nicht zum Ersthelfer werden und Sie können daher keinen Text eingeben.
Christian Kienle
@ChristianKienle Würden Sie dennoch empfehlen, mit der Popup-Anwendung mit OS X-Versionen> 10.7 zu beginnen?
Fatuhoku
Ja. NSPopover + Status Item haben schwerwiegende Einschränkungen in 10.7 und 10.8. Der Screenshot oben zeigt beispielsweise ein Suchfeld. Mit einem NSPopover können Sie nicht richtig mit dem Suchfeld interagieren.
Christian Kienle
1
Warum hat das Popup-Beispiel von Codebox ein so kompliziertes BackgroundPanel?
Rbp
13

BitBar ist eine Anwendung auf GitHub , die "alles in Ihre Mac OS X-Menüleiste einfügen" kann.

Es führt Shell- oder andere ausführbare Skripte aus (die Plugins genannt werden - siehe die vielen Beispiele im Plugins-Repo ) und zeigt die Ergebnisse in der Menüleiste an. Sie können Ihr eigenes Plugin schreiben und es einfach ausführen lassen, indem Sie es dem 'Plugins-Ordner' hinzufügen. Es kann nicht nur Informationen anzeigen, sondern auch vordefinierte Bash-Skripte interaktiv über die von Ihnen definierten Plugin-Menüs ausführen.

Seit ich diese Antwort zum ersten Mal gepostet habe, ist ihre Popularität explodiert (derzeit 52 Mitwirkende) und es gibt jetzt sogar eine verteilbare Version, mit der Sie Ihre eigenen Plugins verpacken können.

Ein sehr einfaches (nicht interaktives) Beispiel, um den Live-Bitcoin-Preis anzuzeigen:

Geben Sie hier die Bildbeschreibung ein

MatzFan
quelle
4
danke an cwd für die Verbesserung meiner eher schlechten ursprünglichen Antwort
MatzFan
10

Da Apple in Yosemite eine NSStatusBarButtonEigenschaft hinzugefügt hat NSStatusItem, können wir die Menüleisten-App viel einfacher implementieren. Ich habe gerade ein Beispielprojekt auf Github erstellt.

https://github.com/taichino/PopupTest

Taichino
quelle
Vielen Dank für die Zusammenstellung!
CWD
2

FlyCut ist eine weitere nette Open Source-Anwendung, die dies tut. (MIT lizenziert.) Sehr praktisch, ich benutze es mehrmals am Tag.

Hier ist ein Code, der relevant zu sein scheint:

    // 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
quelle
Hallo Funroll, ich möchte diese Verknüpfung immer in der Menüleiste behalten, wie die Standard-Lautstärkeregelung in Mac ist es mit der Programmierung möglich ... bitte helfen Sie mir !!!
VSN
@ VSN StackOverflow-Kommentare sind kein guter Ort, um um Hilfe wie diese zu bitten. Ich würde empfehlen zu lesen, wie man eine gute Frage stellt .
Funroll
Ich habe neue Fragen gestellt - jede Hilfe dort .... stackoverflow.com/questions/23605687/…
VSN
0

Mail Notifr ist eine weitere Open Source Menubar App. Es hat mir sehr geholfen, besonders wenn ich herausfinden musste, wie ich das Open-On-Login implementieren kann. Auch im App Store erhältlich .

Lindon Fox
quelle