2012-12-31 18 views
7

mam niestandardową klasę NSWindow który ma następujące metody:NSWindow nie odbiera żadnego powiadomienie gdy traci fokus

- (void)setupWindowForEvents{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowDidResignKey:) name:NSWindowDidResignMainNotification object:self]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowDidResignKey:) name:NSWindowDidResignKeyNotification object:self]; 
} 

-(void)windowDidResignKey:(NSNotification *)note { 
    NSLog(@"notification"); 
    [self close]; 
} 

nazywam [_window setupWindowForEvents]; ale windowDidResignKey nigdy nie jest wywoływana.
ten sposób wzywam moje NSWindow: gdy pozycja na pasku stanu zostanie kliknięty I makeKeyAndOrderFront i okno jest wyświetlane tuż pod elementu paska statusu, tak: enter image description here

Wszelkie pomysły, dlaczego nie dostać żadnego powiadomienia kiedy okno traci ostrość? Użyłem obu i NSWindowDidResignKeyNotification, aby sprawdzić, czy któryś z nich zadziałał, ale żaden z nich nie działa.

Odpowiedz

9

Prawdopodobnie nie otrzymujesz powiadomienia, ponieważ w rzeczywistości nigdy nie masz kluczowego znaczenia. Twoje okno wydaje się być bez obramowania, a okna bez obramowania domyślnie nie przechwytują stanu okna klucza.

w oknie podklasy, należy wrócić TAK na następujących metod:

- (BOOL)canBecomeKeyWindow { 
    return YES; 
} 

- (BOOL)canBecomeMainWindow { 
    return YES; 
} 
+0

dziękuję bardzo, zupełnie o tym zapomniałem. btw, czy możesz wyjaśnić mi różnicę między powiadomieniami 'NSWindowDidResignMainNotification' i' NSWindowDidResignKeyNotification'? –

+4

Dobre pytanie. Kluczowe okna to te, które mają obecnie status pierwszego ratownika i odpowiadają na dane wprowadzone przez użytkownika. Główne okna są jak okna kluczowe, ale niekoniecznie muszą mieć status pierwszego ratownika. Oba stany wydają się skupione. To może być przydatne: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/WinPanel/Concepts/ChangingMainKeyWindow.html –

Powiązane problemy