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.


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.


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.


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


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


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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.