2011-04-11 842 views
10

Tengo esta aplicación que muestra un elemento en la barra de estado del sistema, y ​​uno de los elementos es una vista personalizada con un campo NSTRutón y un NSButton. Cuando el usuario hace clic en el elemento de la barra de estado, muestra el menú, el usuario ingresa texto y presiona el botón. Esto desencadena una acción que muestra una ventana.Ocultar NSMenu programáticamente de NSStatusItem

El problema que estoy teniendo ahora es que, cuando se presiona el botón, desencadena la acción, pero el menú permanece visible. Quiero ocultar el menú, porque la acción ya se ha procesado.

He buscado a través de la API, pero no he podido encontrar cómo hacerlo.

¿Alguna idea?

Esta es la forma en que estoy creando el menú:

NSStatusBar *bar = [NSStatusBar systemStatusBar]; 

self.statusItem = [bar statusItemWithLength:NSVariableStatusItemLength]; 
[statusItem setImage:[NSImage imageNamed:@"icon_status_bar.png"]]; 
[statusItem setHighlightMode:YES]; 

NSMenuItem *textInputItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""]; 
[textInputItem setView:myCustomView]; // created on the Nib file... 

NSMenu *menu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"statusBarMenuTitle", @"")]; 
[menu addItem:textInputItem]; 

[statusItem setMenu:menu]; 

[textInputItem release]; 
[menu release]; 

Respuesta

21

no es obvio en el docs, pero [menu cancelTracking] es lo que desea.

cancelTracking 
Dismisses the menu and ends all menu tracking. 
- (void)cancelTracking 
+0

Gracias! Nunca lo hubiera encontrado con ese nombre ... –

Cuestiones relacionadas