Cómo Mostrar la hoja de carga desde xib? (Mac OS X)
-
29-09-2019 - |
Pregunta
Tengo un archivo xib con sólo NSPanel en ella, estoy tratando de mostrar este panel como hoja modal (con beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:
). el propietario del archivo para este xib es un "myController" clase controlador que tiene la IBOutlet a la NSPanel.
Lo que estoy buscando es algo como:
...
MyController *controller = [[MyController alloc] init];
[NSApp beginSheet:controller.panel modalForWindow:[NSApp mainWindow] modalDelegate:controller didEndSelector:nil contextInfo:nil];
...
Pregunta:
MyController debe heredar de NSWindowController
o NSObject
?. Probé NSWindowController
y initWithWindowNibName:
pero la salida a NSPanel
siempre es nula.
Gracias
Solución
Me resolverlo. Debe desactivar casi todas las propiedades del objeto de la ventana (en el IB) que está utilizando para la hoja. Agrego el siguiente método para mi controlador para mostrar la hoja:
- (void)showInWindow:(NSWindow *)mainWindow {
if (!panelSheet)
[NSBundle loadNibNamed:@"XibName" owner:self];
[NSApp beginSheet:panelSheet modalForWindow:mainWindow modalDelegate:nil didEndSelector:nil contextInfo:nil];
[NSApp runModalForWindow:panelSheet]; //This call blocks the execution until [NSApp stopModal] is called
[NSApp endSheet:panelSheet];
[panelSheet orderOut:self];
}
panelSheet
es un IBOutlet a la ventana de hoja.
Gracias Jon Hess y JWWalker por su ayuda