2012-12-31 14 views
7

ho una classe NSWindow personalizzata che possiede i seguenti metodi:NSWindow non riceve alcuna notifica quando si perde lo stato attivo

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

chiamo [_window setupWindowForEvents]; ma il windowDidResignKey non viene mai chiamato.
Questo è come io chiamo il mio NSWindow: quando l'elemento barra di stato viene cliccato mi makeKeyAndOrderFront e la finestra viene visualizzata a destra sotto la voce di barra di stato, in questo modo: enter image description here

Tutte le idee perché l'ho non si ottiene alcuna notifica quando la finestra perde la messa a fuoco? Ho usato sia NSWindowDidResignMainNotification e NSWindowDidResignKeyNotification per vedere se qualcuno di questi ha funzionato, ma nessuno funziona.

risposta

9

Probabilmente non riceverai la notifica perché in realtà non sei mai al primo posto. La finestra sembra essere senza bordi e le finestre senza bordi non catturano lo stato della finestra chiave per impostazione predefinita.

Nella finestra sottoclasse, essere sicuri di tornare YES sui seguenti metodi:

- (BOOL)canBecomeKeyWindow { 
    return YES; 
} 

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

grazie mille, completamente dimenticato di questo. btw, puoi spiegarmi la differenza tra le notifiche 'NSWindowDidResignMainNotification' e' NSWindowDidResignKeyNotification'? –

+4

Buona domanda. Le finestre chiave sono quelle che attualmente hanno il primo stato di risponditore e rispondono all'input dell'utente. Le finestre principali sono come le finestre chiave, tranne che non devono necessariamente avere il primo stato di risponditore. Entrambi gli stati appaiono concentrati. Questo potrebbe essere utile per te: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/WinPanel/Concepts/ChangingMainKeyWindow.html –