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

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top