Se me ocurrió un truco para hacer frente a esto. No hay notificación de que señala que se ha puesto una ventana en la pantalla, pero hay una notificación que se garantiza que es enviada cuando se coloca una ventana en la pantalla. Estoy hablando de NSWindowDidUpdateNotification
, que indica que una ventana se ha refrescado.
Por supuesto, no es solo enviado cuando aparece la ventana, se envía cada vez que se actualiza la ventana. Huelga decir que esta notificación se envía un lote más de una vez. Así que quiere verlo la primera vez, haga lo suyo e ignore cualquier notificación posterior. En mi caso, quería agregar una hoja a una ventana que otra parte de mi aplicación solicitaría más tarde. Así que hice algo como esto:
__block id observer = [NSNotificationCenter.defaultCenter addObserverForName:NSWindowDidUpdateNotification object:window queue:nil usingBlock:^(NSNotification *note) {
[self showSetupSheet];
[NSNotificationCenter.defaultCenter removeObserver:observer];
}];
No hay ninguna razón particular, se tendría que usar un observador, un observador basado en el método basado en bloques funcionaría igual de bien.
'windowDidExpose: 'es para una ventana que ya está ordenada en ser revelada por otras ventanas b eing ordenado detrás de él. –
Gracias por aclarar. Era difícil saber con solo una descripción en referencia. – Eonil
La descripción es mejor para la notificación que corresponde a ese método: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/ApplicationKit/Classes/NSWindow_Class/Reference/Reference.html#//apple_ref/ c/data/NSWindowDidExposeNotification –