cocoa modal-dialog nswindow

Detener modal cuando la ventana está cerrada(Cocoa)



modal-dialog nswindow (3)

Actualmente estoy mostrando una ventana modal usando este código:

[[NSApplication sharedApplication] runModalForWindow:mainWindow];

Sin embargo, cuando cierro esta ventana, las otras ventanas todavía están inactivas. ¿Cómo ejecuto el método stopModal cuando la ventana se cierra usando la "x roja"?

Gracias,

Miguel


Si tiene un diálogo que se aplica a una ventana específica, entonces probablemente no debería usar un diálogo modal sino una hoja. Los diálogos modales deben evitarse si es posible. Si usa una hoja, el problema que está experimentando ya no será un problema.

- (void)showSheet:(id)sender { [NSApp beginSheet:yourModalWindow modalForWindow:windowThatSheetIsAttachedTo modalDelegate:self didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) contextInfo:nil]; } - (void)sheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo { [sheet orderOut:self]; [NSApp endSheet:sheet]; }


Puede crear un delegado para la ventana y hacer que responda ya sea al
- (nulo) windowWillClose: notificación (NSNotification *) o el
- (void) windowShouldClose: (NSNotification *) métodos de notificación como estos:

- (void)windowWillClose:(NSNotification *)notification { [[NSApplication sharedApplication] stopModal]; }

Consulte Mac Dev Center: Referencia del protocolo NSWindowDelegate


Junto con la respuesta de Randall puede vincular la clase del controlador como el delegado para la ventana definida en su archivo .xib.

Puedes manejar el

[[NSApplication sharedApplication] stopModal];

en cualquiera

  • -(void)performClose:(id)sender

  • -(void)windowWillClose:(NSNotification *)notification

métodos.