Как создать приложение Menubar для Mac


175

РЕДАКТИРОВАТЬ: Это хороший готовый приложение Menubar здесь ( источник GitHub ) с этим ответом .


Мне было интересно, как сделать приложение Menubar, каковы требования для этого?

Я видел простое приложение для меню, чтобы открыть ссылки с помощью вашего браузера, я хочу создать что-то похожее на это.

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

Это приложение, которое мне нравится делать похожим.


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

Я нашел Codebox's Popup отличной отправной точкой. Созрел для разветвления на Github.

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

Хотя это работает хорошо, они отмечают на своем сайте ...

PS В Lion Apple добавляет новый класс для поповеров, как в iOS. Таким образом, после выпуска OS X 10.7 вам лучше полагаться на нативные классы Какао, где это возможно. В других случаях проект Popup все еще должен использоваться.


3
Это не так в любом случае. NSPopover имеет серьезные ограничения: текстовые поля / представления не могут стать первым респондентом, и поэтому вы не можете вводить текст.
Кристиан Кинле

@ChristianKienle, так что вы бы по-прежнему рекомендовали начать с Popup-приложения с версиями OS X> 10.7?
фатухоку

Да. NSPopover + Status Item имеют серьезные ограничения в 10.7 и 10.8. Например, на скриншоте выше показано поле поиска. Используя NSPopover, вы не можете правильно взаимодействовать с полем поиска.
Кристиан Кинл,

1
почему образец Codebox Popup имеет такой сложный BackgroundPanel?
ОПБ

13

BitBar - это приложение на GitHub, которое может «Поместить что-нибудь в строку меню Mac OS X».

Он запускает shell или другие исполняемые скрипты (которые он называет плагинами - см. Множество примеров в репозитории плагинов ) и отображает результаты в строке меню. Вы можете написать свой собственный плагин и запустить его, просто добавив его в «папку плагинов». Помимо отображения информации, он также может запускать предопределенные сценарии 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];

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

@VSN StackOverflow комментарии - не самое подходящее место для такой помощи. Я бы предложил почитать Как задать хороший вопрос .
funroll

я задал новый вопрос - любая помощь там ... stackoverflow.com/questions/23605687/…
VSN

0

Mail Notifr - еще одно приложение Menubar с открытым исходным кодом. Это мне очень помогло, особенно когда мне нужно было выяснить, как реализовать открытое при входе в систему. Также доступно в App Store .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.