Pregunta

¿Cómo se puede reaccionar a los elementos del menú que se hace clic a través del ratón o invocan a través del teclado, por ejemplo:? CMD + Q

[NSApp beginSheet:my_sheet  ...arguments... ];

/*  
The sheet is now shown and the mainmenu isn't usable.
How does one make it usable?
*/

[NSApp endSheet:my_sheet returnCode:0];
¿Fue útil?

Solución

supongo que está utilizando el método de -beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo: NSApp. Si es así, entonces ya debería ser capaz de hacer los comandos de menú. Ese método se ejecuta la hoja modal por sólo la ventana dada (en contraposición a modal para toda la aplicación). Sin embargo, si también llama -runModalForWindow: de NSApp, entonces será modal para toda la aplicación. Por lo tanto, suponiendo que no está llamando a que, a continuación, otras ventanas y comandos de menú debería funcionar bien cuando la hoja está mostrando.

Sin embargo, el elemento de menú 'Salir' es una excepción. No le permitirá dejar de fumar porque hay una sesión activa modal para una ventana, que se supone tiene que ser tratado con antes de la aplicación puede dejar de fumar. Si esto es lo que realmente está tratando de hacer, a continuación, una posible solución es NSApplication subclase y anular su método -terminate: al primer cierre de su hoja (si está abierto). En primer lugar, es necesario hacer una subclase de NSApplication, y que su uso aplicación que mediante el establecimiento tanto en 'MainMenu.xib' y como el Principal Class en su 'Info.plist'). A continuación, añadir algo como esto a su subclase:

- (void)terminate:(id)sender
{
    // First close the sheet (if it's active), using whatever method
    // you have set up to do this...
    [((MyAppDelegate*)[self delegate]) closeSheet:self];

    // Now call the normal implementation
    [super terminate:sender];
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top