2012-12-31 45 views
7

我有了下面的方法自定義NSWindow類:NSWindow未收到任何通知,當它失去焦點

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

我打電話[_window setupWindowForEvents];windowDidResignKey不會被調用。
這是我打電話給我的NSWindow:點擊狀態欄項目時我makeKeyAndOrderFront和窗口顯示在狀態欄項目的正下方,這樣的:enter image description here

任何想法,爲什麼我在沒有得到任何通知當窗戶失去焦點時?我已經使用NSWindowDidResignMainNotificationNSWindowDidResignKeyNotification來查看這些工作是否有效,但沒有任何工作。

回答

9

您可能沒有收到通知,因爲您實際上從來沒有把鑰匙放在首位。您的窗口顯示爲無邊框,並且無邊界窗口默認情況下不會獲取關鍵窗口狀態。

在你的窗口的子類時,請務必在下面的方法返回YES:

- (BOOL)canBecomeKeyWindow { 
    return YES; 
} 

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

太感謝你了,完全忘了這一點。順便說一句,你能解釋我通知'NSWindowDidResignMainNotification'和'NSWindowDidResignKeyNotification'之間的區別嗎? –

+4

好問題。關鍵窗口是當前具有第一響應者狀態並響應用戶輸入的窗口。主窗口就像關鍵窗口,除非它們不一定需要第一響應者狀態。兩個國家似乎都集中注意這可能對你有用:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/WinPanel/Concepts/ChangingMainKeyWindow.html –