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.


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.


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.


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í


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


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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.