2012-12-31 5 views
7

ich eine benutzerdefinierte NSWindow Klasse, die die folgenden Methoden hat:NSWindow erhält keine Benachrichtigung, wenn es den Fokus verliert

- (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]; 
} 

Ich nenne [_window setupWindowForEvents]; aber die windowDidResignKey nie aufgerufen wird.
Dies ist, wie ich meine NSWindow nennen: Wenn der Statusleiste Element geklickt wird I makeKeyAndOrderFront und das Fenster rechts unten in der Statusleiste Element angezeigt, wie folgt aus: enter image description here

Irgendwelche Ideen, warum die ich erhalte keine Benachrichtigung wenn das Fenster den Fokus verliert? Ich habe beide NSWindowDidResignMainNotification und NSWindowDidResignKeyNotification verwendet, um zu sehen, ob irgendwelche von diesen funktionierten, aber keine funktioniert.

Antwort

9

Sie erhalten die Benachrichtigung wahrscheinlich nicht, weil Sie eigentlich nie der Schlüssel an erster Stelle sind. Ihr Fenster scheint grenzenlos zu sein, und randlose Fenster erfassen standardmäßig nicht den Status des Schlüsselfensters.

In Ihrem Fenster Unterklasse, müssen Sie ja auf den folgenden Methoden zurückzukehren:

- (BOOL)canBecomeKeyWindow { 
    return YES; 
} 

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

danke Ihnen so sehr, vollständig über das vergessen. Übrigens, kannst du mir bitte den Unterschied zwischen den Benachrichtigungen 'NSWindowDidResignMainNotification' und' NSWindowDidResignTypeNotification' erklären? –

+4

Gute Frage. Schlüsselfenster sind diejenigen, die derzeit den ersten Responder-Status haben und auf Benutzereingaben reagieren. Hauptfenster sind genau wie Schlüsseldisplays, außer dass sie nicht notwendigerweise den Erstansprecherstatus haben müssen. Beide Zustände erscheinen konzentriert. Dies könnte für Sie nützlich sein: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/WinPanel/Concepts/ChangingMainKeyWindow.html –

Verwandte Themen