Як створити додаток Menubar для Mac


175

РЕДАКТУЙТЕ: Це приємна готова програма menubar тут ( джерело github ) за цією відповіддю .


Мені було цікаво, як зробити аплікацію для меню, які вимоги до цього робити?

Я побачив простий додаток для меню: відкривати посилання за допомогою вашого браузера, я хочу створити щось подібне до цього.

введіть тут опис зображення

Це додаток, який я люблю робити подібним.


4
Ось простий підручник .
NSRover

Відповіді:


133

NSStatusItem - це те, що ви шукаєте. Також додайте LSUIElement зі значенням рядка 1 у свій Info.plist, щоб сховати його від Dock.


14
mactech.com/articles/mactech/Vol.22/22.02/Menulet - ось зразок коду з деякими поясненнями.
SteamTrout

2
Ви можете переглянути один із моїх проектів GitHug на прикладі: github.com/nippysaurus/WeatherRock/blob/master/…
Nippysaurus

3
Я реалізував приклад, описаний у посиланні SteamTrout, і поставив його на github. Саме тут: github.com/wanderingstan/IPMenuletExample
Стен Джеймс

Привіт, Steam Trout, дякую за допомогу ... але як ми можемо тримати ярлик нашої програми завжди в панелі меню, поки користувач не видалить програму ... будь-яка допомога .... stackoverflow.com/questions/23605687/…
VSN

66

Я знайшов Popup Codebox як чудовий вихідний пункт. Дозріла для розщеплення на Github.

введіть тут опис зображення

Хоча це працює добре, вони зазначають на своєму сайті ...

PS У Lion, Apple додає новий клас для переповнених, як в iOS. Отже, після виходу ОС X 10.7 вам краще покластися на рідні класи какао, де це можливо. В інших випадках проект Popup все-таки повинен бути корисним.


3
Це неправда ні в якому разі. NSPopover має серйозні обмеження: текстові поля / перегляди не можуть стати першими відповідями, і тому ви не можете вводити текст.
Крістіан Кіенле

@ChristianKienle, щоб ви все-таки рекомендували починати з програми Popup з версіями OS X> 10.7?
fatuhoku

Так. NSPopover + Status Item мають серйозні обмеження в 10.7 та 10.8. Наприклад, на скріншоті вище показано поле пошуку. Використовуючи NSPopover, ви не можете належним чином взаємодіяти з полем пошуку.
Крістіан Кіенле

1
чому зразок Popup Codebox має такий складний BackgroundPanel?
rbp

13

BitBar - це додаток на GitHub, який може "Покласти що-небудь у меню меню Mac OS X".

Він запускає оболонку або інші виконувані сценарії (які він викликає Плагіни - див. Безліч прикладів репо-плагінів ) та відображає результати в рядку меню. Ви можете написати власний плагін і запустити його, просто додавши його в папку "Плагіни". Окрім відображення інформації, він також може запускати попередньо визначені сценарії bash з інтерактивного меню плагінів, які ви визначаєте.

З того часу, як я вперше опублікував цю відповідь, ця популярність є вибухнула (зараз 52 учасники), і тепер є навіть версія, що можна розповсюджувати, за допомогою якої ви можете упакувати власні плагіни.

Дуже простий (неінтерактивний) приклад, щоб показати ціну біткойна в прямому ефірі:

введіть тут опис зображення


4
завдяки cwd за вдосконалення моєї досить поганої оригінальної відповіді
MatzFan

10

Оскільки Apple додала NSStatusBarButtonвластивості NSStatusItemв Yosemite, ми можемо реалізувати додаток menubar набагато простіше. Я щойно створив зразок проекту на github.

https://github.com/taichino/PopupTest


Дякую за те, що ви зробили це разом!
cwd

2

FlyCut - це ще одна приємна програма з відкритим кодом, яка робить це. (MIT ліцензовано.) Дуже зручно, я використовую його кілька разів на день.

Ось якийсь код, здається, він може бути актуальним:

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

Привіт funrollroll, я б хотів, щоб цей ярлик завжди був у панелі меню, як контроль за допомогою значень за замовчуванням у Mac, чи можливо це з програмуванням ... будь ласка, допоможіть мені !!!
ВСН

@VSN коментарі StackOverflow не є гарним місцем, щоб просити про допомогу, як це. Я б запропонував прочитати Як задати гарне запитання .
funroll

я задав нове запитання - будь-яка допомога там .... stackoverflow.com/questions/23605687/…
VSN

0

Mail Notifr - це ще одне додаток з відкритим кодом Menubar. Це допомогло мені купу, особливо коли мені потрібно було розібратися, як реалізувати open on login. Також доступний у App Store .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.