2010-01-18 17 views
8

Al tratar de aprender los fundamentos del manejo del menú. La barra de menú de mi aplicación de prueba tiene 3 menús, a saber, "TestApp", "Archivo" y "Ayuda". Me parece que puedo eliminar por completo estos menús, simplemente llamando por ejemplo:Desactivar/habilitar una opción del menú de la aplicación

NSMenu* rootMenu = [NSApp mainMenu]; 
[rootMenu removeItemAtIndex:2]; 

Sin embargo, yo solamente quiero volver a desactivar temporalmente (gris a cabo). ¿Hay una manera igualmente simple de hacer esto, por favor?

Respuesta

7

Es posible que esté malinterpretando su pregunta, pero parece que desea poder oscurecer los títulos reales de los menús que aparecen con la barra de menús del sistema (como descolgar el menú "Archivo"). No estoy seguro de si es aún posible, pero sin duda va en contra de la Apple Human Interface Guidelines: título

Una de menú se muestra undimmed incluso si todos los comandos del menú son disponible (atenuado) al mismo tiempo. Los usuarios siempre deben poder ver los contenidos del menú , estén o no disponibles actualmente .

Por lo tanto, la verdadera solución al problema es poder oscurecer todos los elementos del menú dentro de un menú determinado cuando su aplicación se encuentra en cierto estado. Para hacer esto, implement the NSUserInterfaceValidations protocol. Solo requiere la implementación del método - (BOOL)validateUserInterfaceItem:. Normalmente, al implementar este método, simplemente verifica el selector del elemento de la interfaz de usuario que está siendo validado, y devuelve SÍ si debería estar habilitado, o NO si no debería (lo que oscurecerá el elemento del menú).

+0

Sí, entendiste correctamente, CJ. Yo * intentaba * atenuar los menús "Archivo" y/o "Editar" ellos mismos, en lugar de sus respectivos elementos, y no estaba al tanto de ese párrafo crítico en las Directrices de Interfaz Humana de Apple que señalaban que no debería estar haciendo de esa manera. Incluí el método - (BOOL) validateUserInterfaceItem: en mi código, y funciona perfectamente. Una solución tan simple. Un millón de gracias :-) – Bender

Cuestiones relacionadas