Cómo crear una aplicación de barra de menús para Mac

175

EDITAR: Esta es una buena aplicación de barra de menús lista para usar aquí ( fuente de github ) por esta respuesta .


Me preguntaba cómo hacer una aplicación de barra de menú, ¿cuáles son los requisitos para hacerlo?

Vi que una aplicación simple para la barra de menú era abrir enlaces usando su navegador, quiero crear algo similar a eso.

ingrese la descripción de la imagen aquí

Esta es la aplicación que me gusta hacer similar.

MacMac
fuente
44
Aquí hay un tutorial simple .
NSRover

Respuestas:

133

NSStatusItem es lo que estás buscando. Agregue también LSUIElement con un valor de cadena de 1 a su Info.plist para ocultarlo del Dock.

SteamTrout
fuente
14
mactech.com/articles/mactech/Vol.22/22.02/Menulet : aquí hay un código de muestra con alguna explicación.
SteamTrout
2
Puede ver uno de mis proyectos de GitHug para ver un ejemplo: github.com/nippysaurus/WeatherRock/blob/master/…
Nippysaurus
3
Implementé el ejemplo descrito en el enlace de SteamTrout y lo puse en github. Está aquí: github.com/wanderingstan/IPMenuletExample
Stan James el
Hola Steam Trout, gracias por su ayuda ... pero ¿cómo podemos mantener nuestro acceso directo a la aplicación siempre en la barra de menú, hasta que el usuario desinstale la aplicación ... cualquier ayuda ... stackoverflow.com/questions/23605687/…
VSN
66

He encontrado que Popbox de Codebox es un excelente punto de partida. Está maduro para bifurcar en Github.

ingrese la descripción de la imagen aquí

Aunque funciona bien, sí notan en su sitio ...

PD: en Lion, Apple está agregando una nueva clase para popovers como en iOS. Entonces, después del lanzamiento de OS X 10.7, será mejor que confíe en las clases nativas de Cocoa donde sea posible. En otros casos, el proyecto emergente aún debería ser utilizable.

Alex Gray
fuente
3
Esto no es cierto en ningún caso. NSPopover tiene serias limitaciones: los campos / vistas de texto no pueden convertirse en el primer respondedor y, por lo tanto, no puede ingresar texto.
Christian Kienle
@ChristianKienle, ¿aún así recomendaría comenzar con la aplicación Popup con versiones de OS X> 10.7?
fatuhoku
Si. NSPopover + Status Item tienen serias limitaciones en 10.7 y 10.8. Por ejemplo, la captura de pantalla anterior muestra un campo de búsqueda. Al usar un NSPopover no puede interactuar con el campo de búsqueda correctamente.
Christian Kienle
1
¿Por qué la muestra emergente de Codebox tiene un BackgroundPanel tan complicado?
rbp
13

BitBar es una aplicación en GitHub que puede "poner cualquier cosa en la barra de menú de Mac OS X".

Ejecuta shell u otros scripts ejecutables (que llama Complementos; vea los muchos ejemplos en el repositorio de complementos ) y muestra los resultados en la barra de menú. Puede escribir su propio complemento y ejecutarlo simplemente agregándolo a la 'Carpeta de complementos'. Además de mostrar información, también puede ejecutar scripts de bash predefinidos de forma interactiva desde los menús de complementos que defina.

Desde que publiqué por primera vez esta respuesta, su popularidad ha explotado (52 contribuyentes actualmente) y ahora incluso hay una versión distribuible con la que puede empaquetar sus propios complementos.

Un ejemplo muy simple (no interactivo) para mostrar el precio de Bitcoin en vivo:

ingrese la descripción de la imagen aquí

MatzFan
fuente
44
gracias a cwd por mejorar mi respuesta original bastante pobre
MatzFan
10

A medida que Apple agregó NSStatusBarButtonpropiedades a NSStatusItemYosemite, podemos implementar la aplicación de la barra de menús de manera mucho más simple. Acabo de crear un proyecto de muestra en github.

https://github.com/taichino/PopupTest

taichino
fuente
¡Gracias por armar esto!
cwd
2

FlyCut es otra buena aplicación de código abierto que hace esto. (Licencia MIT.) Muy útil también, lo uso varias veces al día.

Aquí hay un código que parece ser 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];
funroll
fuente
Hola funroll, me gustaría mantener este acceso directo siempre en la barra de menú, como el control de valor predeterminado en mac, ¿es posible con la programación ... por favor, ayúdenme!
VSN
Los comentarios de @VSN StackOverflow no son un buen lugar para pedir ayuda como esta. Sugeriría leer Cómo hacer una buena pregunta .
funroll
He hecho una nueva pregunta: cualquier ayuda allí ... stackoverflow.com/questions/23605687/…
VSN
0

Mail Notifr es otra aplicación Menubar de código abierto. Me ayudó mucho, especialmente cuando necesitaba descubrir cómo implementar la apertura al iniciar sesión. También disponible en la App Store .

lindon fox
fuente