No olvide que si intenta ejecutar esto como una hoja "modal" (es decir, se hace cargo de la aplicación hasta que el usuario la rechace), tendrá que pulsar un nuevo ciclo de ejecución.
Lo que ha hecho se muestra en la hoja, y luego no se presiona un nuevo bucle, por lo que el sistema operativo solo muestra la hoja, ve que no hay razón para mantenerlo en ejecución y lo apaga y reanuda la ejecución en el siguiente línea:
me suelen hacer hojas de la siguiente manera:
- (id)showPanelModalAgainstWindow: (NSWindow *)window
{
[[NSApplication sharedApplication] beginSheet: panelToShow
modalForWindow: window
modalDelegate: self
didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:)
contextInfo: nil];
[[NSApplication sharedApplication] runModalForWindow: panelToShow];
if (m_returnCode == NSCancelButton) return nil;
}
- (void)sheetDidEnd:(NSWindow *)sheet
returnCode:(int)returnCode
contextInfo:(void *)contextInfo
{
UNUSED(sheet);
UNUSED(contextInfo);
m_returnCode = returnCode;
}
Luego, en sus rutinas de aceptar y/o botón de cancelación:
- (IBAction)continueButtonClicked:(id)sender
{
UNUSED(sender);
[[NSApplication sharedApplication] stopModal];
[createAccountWizardPanel orderOut: nil];
[[NSApplication sharedApplication] endSheet: createAccountWizardPanel
returnCode: NSOKButton];
}
estoy seguro de que es tan ligeramente menos código-modo de hacer esto, pero no he mirado profundamente en él, porque de esta manera funciona perfectamente bien hasta ahora ...
Los comentarios anteriores sobre la vida útil del controlador y los objetos del panel también relevante: asegúrese de comprender exactamente qué objetos necesita para qué vidas al mostrar un panel modal.
Spot on! Muchas gracias. –