2011-02-26 35 views
8

Tengo un NSMenuItem llamado historial que reside en un menú denominado NSMenu. Cuando mi programa comienza, el historial no tiene un submenú, por lo que está deshabilitado. Luego, en algún momento, necesito un submenú para la historia, por lo que lo creo, conviértalo en un submenú de la historia. Aparece una flecha al lado del historial que me dice que el submenú está allí. Pero el historial aún está desactivado. He intentado con setEnabled pero no funciona. Por favor ayuda. Aquí mi código:NSMenuItem no está habilitado?

Esto es cuando creo mi menú, y la historia como se puede ver un NSMenuItem en el menú.

menu = [[NSMenu alloc] initWithTitle:@"Menu"]; 
[[menu addItemWithTitle:@"History" action:nil keyEquivalent:@""] setTarget:self]; 
[[menu addItemWithTitle:@"Settings" action:@selector(loadSettings:) keyEquivalent:@""] setTarget:self]; 
[[menu addItemWithTitle:@"Quit" action:@selector(terminateApp:) keyEquivalent:@""] setTarget:self]; 

En este punto, el historial está desactivado (gris). Entonces en algún lugar en el programa que necesita tener un submenú para la historia por lo que:

 if (historyMenu == nil) { 
     historyMenu = [[NSMenu alloc] initWithTitle:@"Lyrics history"]; 
     [menu setSubmenu:historyMenu forItem:[menu itemWithTitle:@"History"]]; 
    } 

ahora veo una flecha al lado de la historia, pero sigue en gris.

Por favor ayuda, he estado tratando de resolver esto para los últimos 2 horas. Gracias.

Respuesta

8

está configurando el objetivo, pero tienen una acción nula. Intenta no establecer el objetivo. Esto puede dejarlo habilitado todo el tiempo, en cuyo caso puede que tenga que habilitar o deshabilitar manualmente el elemento del menú.

Here is the documentation sobre cómo obtener los elementos de menú habilitadas.

+0

Gracias, pero ¿Qué sucede si no configuro un método de acción? De hecho, ni siquiera necesito establecer un objetivo, no sé por qué lo tengo allí. De todos modos, voy a intentar lo que dijiste, gracias por la ayuda. – user635064

2

tuve que anular el validateMenuItem método para return true:

override func validateMenuItem(menuItem: NSMenuItem) -> Bool { 
    return true 
} 

Es en realidad no utilizar el método de validación hasta que Establecer destino a la libre aunque, al igual que lo hizo con

menu.addItemWithTitle("An Item", action: #selector(itemPressed), keyEquivalent: "")?.target = self 
+0

Gracias esto funcionó para mí. – adev

Cuestiones relacionadas