Mi sono inventato un trucco per occuparsi di questo. Non c'è notifica che segnali che una finestra è stata messa sullo schermo, ma c'è una notifica che è praticamente garantita per inviata quando una finestra viene messa sullo schermo. Sto parlando di NSWindowDidUpdateNotification
, che indica che una finestra si è aggiornata da sola.
Ovviamente, non è solo inviato quando viene visualizzata la finestra, viene inviata ogni volta che la finestra viene aggiornata. Inutile dire che questa notifica viene inviata un lotto più di una volta. Quindi vuoi guardarlo per la prima volta, fai le tue cose e ignora tutte le notifiche successive. Nel mio caso, volevo aggiungere un foglio a una finestra che un'altra parte della mia app avrebbe ordinato in seguito. Così ho fatto qualcosa di simile:
__block id observer = [NSNotificationCenter.defaultCenter addObserverForName:NSWindowDidUpdateNotification object:window queue:nil usingBlock:^(NSNotification *note) {
[self showSetupSheet];
[NSNotificationCenter.defaultCenter removeObserver:observer];
}];
Non c'è alcun motivo particolare si dovrà utilizzare un osservatore osservatore metodo-based basata su blocchi avrebbe funzionato altrettanto bene.
fonte
2013-04-23 05:45:59
'windowDidExpose: 'è per una finestra che è già stata ordinata per essere rivelata da altre finestre b Eing ordinò dietro di esso. –
Oh grazie per i chiarimenti. Era difficile sapere con solo la descrizione in riferimento. – Eonil
La descrizione è migliore per la notifica che quel metodo corrisponde a: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/ApplicationKit/Classes/NSWindow_Class/Reference/Reference.html#//apple_ref/ c/data/NSWindowDidExposeNotification –