2010-08-26 11 views
13

Ok, esto me está haciendo campaña:NSApplication endSheet: no tiene efecto

puedo crear una hoja modal en una ventana como

-(IBAction) login: (id) sender { 
[NSApp beginSheet:loginWindow 
    modalForWindow:window 
    modalDelegate:nil 
    didEndSelector:nil 
     contextInfo:nil]; 
} 

y tratar de quitarlo con

-(IBAction) loginWindowCancelPressed: (id) sender { 
debugLog(@"cancel"); 
[NSApp endSheet:loginWindow]; 
} 

pero permanece.

He comprobado todas las cosas obvias como las conexiones IB y asegurándome de que Windows y loginWindow están presentes y en el estado normal.

Entonces, la pregunta es: ¿Me estoy perdiendo algo?

Respuesta

19

Debe configurar un delegado para la hoja. El delegado debe implementar un método con una firma como la siguiente:

- (void)didEndSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo; 

(Se puede utilizar un nombre diferente si se quiere, pero debe aceptar los mismos parámetros.)

Usted puede hacer lo que necesita hacer en ese método, pero finalmente debe terminar con:

[sheet orderOut:self]; 

que descartarán la hoja.

+0

Y así es. ¡Gracias! – tomwhipple

+2

Realmente no necesita un delegado (es opcional). Lo único que falta es la llamada a orderOut: – Nik

+1

He configurado un delegado y un selector. La hoja está controlada por un controlador de ventana. Llamar a endSheet: no tiene ningún efecto (el delegado NUNCA es notificado). Llamar a StopModal funciona, pero es incorrecto y causa problemas al mostrar más hojas. WTF? Cocoa para el escritorio realmente apesta a lo grande. El 90% del tiempo dedicado a lidiar con estas idiosincrasias ... –

3

Ver: no se requiere Creating a Modal Dialog or Window in Cocoa Objective-c?

Un delegado. Lo siguiente funciona para que lo descarte y permite volver a llamarlo más tarde:

[NSApp endSheet: loginWindow]; 
[loginWindow orderOut:self]; 
+0

Para una simplicidad pura, esta es una solución útil. Funciona con el nuevo sistema de guión gráfico para OSX también. –

Cuestiones relacionadas