Jak stworzyć aplikację Menubar na Maca

175

EDYCJA: To jest ładna, gotowa aplikacja paska menu tutaj ( źródło github ) według tej odpowiedzi .


Zastanawiałem się, jak zrobić aplikację paska menu, jakie są wymagania, aby to zrobić?

Widziałem, że prosta aplikacja do paska menu miała otwierać linki za pomocą przeglądarki, chcę stworzyć coś podobnego.

wprowadź opis obrazu tutaj

To jest aplikacja, którą lubię robić podobnie.

MacMac
źródło
4
Oto prosty samouczek .
NSRover

Odpowiedzi:

133

NSStatusItem jest tym, czego szukasz. Dodaj również element LSUIElement o wartości 1 do swojej Info.plist, aby ukryć go przed Dockiem.

SteamTrout
źródło
14
mactech.com/articles/mactech/Vol.22/22.02/Menulet - oto przykładowy kod z wyjaśnieniem.
SteamTrout
2
Możesz sprawdzić jeden z moich projektów GitHug na przykład: github.com/nippysaurus/WeatherRock/blob/master/…
Nippysaurus
3
Zaimplementowałem przykład opisany w linku SteamTrout i umieściłem go na githubie. Jest tutaj: github.com/wanderingstan/IPMenuletExample
Stan James
Witaj Steam Trout, dziękujemy za pomoc ... ale jak możemy utrzymać nasz skrót do aplikacji zawsze na pasku menu, dopóki użytkownik nie odinstaluje aplikacji ... jakakolwiek pomoc .... stackoverflow.com/questions/23605687/
VSN
66

Uważam, że Popup Codebox jest świetnym punktem wyjścia. Jest gotowy do rozwidlenia na Githubie.

wprowadź opis obrazu tutaj

Chociaż działa dobrze, zauważają na swojej stronie ...

PS W Lion, Apple dodaje nową klasę dla popoverów, takich jak w iOS. Tak więc po wydaniu OS X 10.7 lepiej polegać na rodzimych klasach Cocoa, jeśli jest to możliwe. W innych przypadkach projekt Popup powinien nadal nadawać się do użytku.

Alex Gray
źródło
3
W każdym razie nie jest to prawdą. NSPopover ma poważne ograniczenia: pola tekstowe / widoki nie mogą zostać pierwszą osobą odpowiadającą i dlatego nie można wprowadzać tekstu.
Christian Kienle,
@ChristianKienle, czy nadal zalecamy rozpoczęcie pracy z aplikacją Popup w wersjach systemu OS X> 10.7?
fatuhoku
Tak. Pozycja statusu NSPopover + ma poważne ograniczenia w wersjach 10.7 i 10.8. Na przykład powyższy zrzut ekranu pokazuje pole wyszukiwania. Korzystając z NSPopover, nie można poprawnie korzystać z pola wyszukiwania.
Christian Kienle,
1
dlaczego próbka Popup Codebox ma tak skomplikowany BackgroundPanel?
rbp
13

BitBar to aplikacja na GitHubie, która może „umieścić wszystko na pasku menu Mac OS X”.

Uruchamia powłokę lub inne wykonywalne skrypty (które nazywa Wtyczkami - zobacz wiele przykładów w repozytorium wtyczek ) i wyświetla wyniki na pasku menu. Możesz napisać własną wtyczkę i uruchomić ją po prostu dodając ją do „folderu wtyczek”. Oprócz wyświetlania informacji, może również interaktywnie uruchamiać predefiniowane skrypty bash z menu wtyczek, które zdefiniujesz.

Odkąd po raz pierwszy opublikowałem tę odpowiedź, jej popularność gwałtownie wzrosła (obecnie 52 współtwórców), a teraz istnieje nawet wersja do dystrybucji, za pomocą której można spakować własne wtyczki.

Bardzo prosty (nieinteraktywny) przykład pokazujący cenę Bitcoin na żywo:

wprowadź opis obrazu tutaj

MatzFan
źródło
4
dzięki cwd za poprawienie mojej raczej kiepskiej oryginalnej odpowiedzi
MatzFan
10

Ponieważ Apple dodał NSStatusBarButtonwłaściwość do NSStatusItemYosemite, możemy znacznie uprościć aplikację paska menu. Właśnie stworzyłem przykładowy projekt na githubie.

https://github.com/taichino/PopupTest

taichino
źródło
Dziękuję za połączenie!
cwd
2

FlyCut to kolejna fajna aplikacja open source, która to robi. (Na licencji MIT). Bardzo poręczny, używam go kilka razy dziennie.

Oto kod, który wydaje się być odpowiedni:

    // 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
źródło
Cześć funroll, chciałbym, aby ten skrót był zawsze na pasku menu, taki jak domyślna kontrola wartości w Macu, czy jest to możliwe z programowaniem ... proszę mi pomóc!
VSN
Komentarze @VSN StackOverflow nie są dobrym miejscem do proszenia o pomoc w ten sposób. Proponuję przeczytać Jak zadać dobre pytanie .
funroll
zadałem nowe pytanie - jakakolwiek pomoc ... stackoverflow.com/questions/23605687/…
VSN
0

Mail Notifr to kolejna aplikacja Menubar typu open source. Pomogło mi to sporo, zwłaszcza gdy musiałem dowiedzieć się, jak zaimplementować otwieranie przy logowaniu. Dostępne również w App Store .

lindon fox
źródło