Wpadłem na hakera, żeby sobie z tym poradzić. Nie ma żadnego powiadomienia, że okno zostało umieszczone na ekranie, ale jest pewne powiadomienie, które z pewnością zostanie nadane wysłane, gdy okno zostanie umieszczone na ekranie. Mówię o NSWindowDidUpdateNotification
, co oznacza, że okno odświeżyło się.
Oczywiście, nie jest to tylko wysłane, gdy pojawi się okno - jest wysyłane za każdym razem, gdy okno się aktualizuje. Nie trzeba dodawać, że to powiadomienie jest wysyłane więcej niż jeden raz na numer część. Chcesz go obejrzeć za pierwszym razem, zrób coś i zignoruj wszelkie kolejne powiadomienia. W moim przypadku chciałem dodać arkusz do okna, które później zamawiałaby kolejna część mojej aplikacji. Więc zrobiłem coś takiego:
__block id observer = [NSNotificationCenter.defaultCenter addObserverForName:NSWindowDidUpdateNotification object:window queue:nil usingBlock:^(NSNotification *note) {
[self showSetupSheet];
[NSNotificationCenter.defaultCenter removeObserver:observer];
}];
nie ma szczególnego powodu, trzeba by użyć obserwatora obserwator metody oparte na bazie bloku będzie działać tak samo dobrze.
'windowDidExpose: 'jest dla okna, które jest już uporządkowane, gdy zostało ujawnione przez inne okna b za sobą nakazał. –
Och dzięki za wyjaśnienie. Trudno o tym wiedzieć tylko z opisem w odnośniku. – Eonil
Opis jest lepszy dla powiadomienia, że ta metoda odpowiada: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/ApplicationKit/Classes/NSWindow_Class/Reference/Reference.html#//apple_ref/ c/data/NSWindowDidExposeNotification –