Como criar um aplicativo da barra de menus para Mac


175

EDIT: Esta é uma boa aplicação de barra de menu pronta aqui ( fonte github ) por esta resposta .


Fiquei me perguntando como fazer um aplicativo de barra de menu, quais são os requisitos para isso?

Eu vi que um aplicativo simples para a barra de menus era abrir links usando o navegador, quero criar algo semelhante a isso.

insira a descrição da imagem aqui

Esta é a aplicação que eu gosto de fazer semelhante.


4
Aqui está um tutorial simples .
NSRover 10/10

Respostas:


133

NSStatusItem é o que você está procurando. Adicione também LSUIElement com o valor da string 1 ao seu Info.plist para ocultá-lo do Dock.


14
mactech.com/articles/mactech/Vol.22/22.02/Menulet - aqui está um código de exemplo com algumas explicações.
SteamTrout 5/08/10

2
Você pode conferir um dos meus projetos GitHug como exemplo: github.com/nippysaurus/WeatherRock/blob/master/…
Nippysaurus

3
Eu implementei o exemplo descrito no link do SteamTrout e o coloquei no github. Ele está aqui: github.com/wanderingstan/IPMenuletExample
Stan James

Olá Steam Trout, obrigado por sua ajuda ... mas como podemos manter nosso atalho do aplicativo sempre na barra de menus, até o usuário desinstalar o aplicativo ... qualquer ajuda .... stackoverflow.com/questions/23605687/…
VSN

66

Eu achei o Popup do Codebox um ótimo ponto de partida. Está pronto para bifurcação no Github.

insira a descrição da imagem aqui

Embora funcione bem, eles anotam em seu site ...

PS No Lion, a Apple está adicionando uma nova classe para popovers como no iOS. Portanto, após o lançamento do OS X 10.7, é melhor confiar nas classes nativas de cacau sempre que possível. Em outros casos, o projeto Popup ainda deve ser utilizável.


3
Isso não é verdade em nenhum caso. O NSPopover possui sérias limitações: os campos / exibições de texto não podem se tornar o primeiro a responder e, portanto, você não pode inserir texto.
Christian Kienle

@ChristianKienle, então você ainda recomendaria começar com o aplicativo Popup com versões do OS X> 10.7?
Fatuhoku

Sim. O item NSPopover + Status tem sérias limitações em 10.7 e 10.8. Por exemplo, a captura de tela acima mostra um campo de pesquisa. Ao usar um NSPopover, você não pode interagir corretamente com o campo de pesquisa.
Christian Kienle

1
por que a amostra Popup do Codebox tem um BackgroundPanel tão complicado?
Rbp

13

O BitBar é um aplicativo no GitHub que pode "Colocar qualquer coisa na barra de menus do Mac OS X".

Ele executa shell ou outros scripts executáveis ​​(que ele chama de Plugins - veja os muitos exemplos no repositório de plugins ) e exibe os resultados na barra de menus. Você pode escrever seu próprio plugin e executá-lo simplesmente adicionando-o à 'pasta Plugins'. Além de exibir informações, ele também pode executar scripts bash predefinidos interativamente a partir dos menus de plug-in que você define.

Desde que publiquei esta resposta pela primeira vez, sua popularidade explodiu (52 colaboradores atualmente) e agora existe até uma versão distribuível com a qual você pode empacotar seus próprios plugins.

Um exemplo muito simples (não interativo) para mostrar o preço do Bitcoin ao vivo:

insira a descrição da imagem aqui


4
graças a cwd para melhorar minha resposta inicial bastante pobre
MatzFan

10

Como a Apple adicionou NSStatusBarButtonpropriedades NSStatusItemem Yosemite, podemos implementar o aplicativo da barra de menus muito mais simples. Acabei de criar um projeto de amostra no github.

https://github.com/taichino/PopupTest


Obrigado por colocar isso em conjunto!
Cwd

2

FlyCut é outro bom aplicativo de código aberto que faz isso. (Licenciado pelo MIT.) Muito útil também, eu o uso várias vezes ao dia.

Aqui está um código que parece relevante:

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

Oi funroll, eu gostaria de manter esse atalho sempre na barra de menus como controle de valor padrão no mac é possível com a programação ... por favor me ajude !!!
VSN

Os comentários do @VSN StackOverflow não são um bom lugar para pedir ajuda como esta. Eu sugeriria ler Como fazer uma boa pergunta .
Funroll

Eu fiz uma nova pergunta - qualquer ajuda lá .... stackoverflow.com/questions/23605687/…
VSN

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.