Mac için bir Menubar uygulaması nasıl oluşturulur?


175

DÜZENLEME: Bu güzel hazır menü çubuğu uygulamadır burada ( github kaynak bundan) cevap .


Bir menubar başvurusunun nasıl yapılacağını merak ediyordum, bunun için gereksinimler nelerdir?

Ben menü çubuğu için basit bir uygulama gördüm tarayıcınızı kullanarak bağlantıları açmak için, ben buna benzer bir şey oluşturmak istiyorum.

resim açıklamasını buraya girin

Bu benzer yapmak istiyorum uygulama.


4
İşte basit bir öğretici .
NSRover

Yanıtlar:


133

NSStatusItem aradığınız şey. Ayrıca Dock'tan gizlemek için Info.plist'inize 1 dize değerine sahip LSUIElement ekleyin.


14
mactech.com/articles/mactech/Vol.22/22.02/Menulet - işte biraz açıklama içeren bir örnek kod.
SteamTrout

2
Bir örnek için GitHug projelerimden birine göz atabilirsiniz: github.com/nippysaurus/WeatherRock/blob/master/…
Nippysaurus

3
SteamTrout'un bağlantısında açıklanan örneği uyguladım ve github'a koydum. Burada: github.com/wanderingstan/IPMenuletExample
Stan James

Merhaba Steam Alabalık, yardımın için teşekkürler ... ama kullanıcı uygulamayı
kaldırana

66

Codebox Popup'ın harika bir başlangıç ​​noktası olduğunu gördüm . Github'a çatallanmak için olgunlaşmış .

resim açıklamasını buraya girin

Güzel çalışıyor olsa da, kendi sitelerinde not edin ...

PS Lion'da Apple, iOS'ta olduğu gibi popovers için yeni bir sınıf ekliyor. Bu nedenle, OS X 10.7 yayınlandıktan sonra, mümkün olan yerlerde yerel Kakao sınıflarına güvenmeniz daha iyi olur. Diğer durumlarda, Popup projesi hala kullanılabilir olmalıdır.


3
Bu her durumda doğru değildir. NSPopover'ın ciddi sınırlamaları vardır: Metin Alanları / Görünümler ilk yanıtlayıcı olamaz ve bu nedenle metin giremezsiniz.
Christian Kienle

@ChristianKienle, OS X sürümleri> 10.7 olan Popup uygulamasıyla başlamanızı tavsiye eder misiniz?
fatuhoku

Evet. NSPopover + Status Eşyasının 10.7 ve 10.8'de ciddi sınırlamaları vardır. Örneğin, yukarıdaki ekran görüntüsü bir arama alanını göstermektedir. Bir NSPopover kullanarak arama alanıyla düzgün etkileşim kuramazsınız.
Christian Kienle

1
Codebox'ın Popup örneğinde neden bu kadar karmaşık bir BackgroundPanel var?
rbp

13

BitBar GitHub'da "Mac OS X menü çubuğuna bir şey koyabilir" bir uygulamadır .

Kabuk veya diğer yürütülebilir komut dosyalarını çalıştırır ( Eklentiler olarak adlandırır - eklenti deposundaki birçok örneğe bakın ) ve sonuçları menü çubuğunda görüntüler. Kendi eklentinizi yazabilir ve basitçe 'Eklentiler klasörüne' ekleyerek çalıştırabilirsiniz. Bilgileri görüntülemenin yanı sıra, tanımladığınız eklenti menülerinden etkileşimli olarak önceden tanımlanmış bash komut dosyalarını çalıştırabilir.

Bu yanıtı ilk yayınladığımdan beri popülaritesi patladı (şu anda 52 katılımcı) ve şimdi kendi eklentilerinizi paketleyebileceğiniz dağıtılabilir bir sürümü bile var.

Canlı Bitcoin fiyatını göstermek için çok basit (etkileşimli olmayan) bir örnek:

resim açıklamasını buraya girin


4
sayesinde CWD'sindeki benim oldukça zayıf orijinal cevabı geliştirmek için
MatzFan

10

Apple Yosemite'de NSStatusBarButtonmülk NSStatusItemekledikçe, menubar uygulamasını çok daha basit bir şekilde uygulayabiliriz. Az önce github üzerinde örnek bir proje yarattım.

https://github.com/taichino/PopupTest


Bunları yanyana koyduğunuz için teşekkürler!
cwd

2

FlyCut bunu yapan başka bir güzel açık kaynak uygulamasıdır. (MIT lisanslı.) Çok kullanışlı, günde birkaç kez kullanıyorum.

Alakalı gibi görünen bazı kodlar şunlardır:

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

Merhaba funroll, ben bu kısayolu her zaman menü çubuğunda mac varsayılan valume kontrolü gibi tutmak istiyorum programlama ile mümkün ... lütfen bana yardım et !!!
VSN

@VSN StackOverflow yorumları böyle bir yardım istemek için iyi bir yer değildir. İyi bir soru nasıl sorulur diye okumayı öneririm .
funroll

yeni soru-orada herhangi bir yardım sordum .... stackoverflow.com/questions/23605687/…
VSN

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.