9

我有一个自定义的 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的正下方显示窗口,如下所示:在此处输入图像描述

任何想法为什么当窗口失去焦点时我没有收到任何通知?我已经使用了这两种方法NSWindowDidResignMainNotificationNSWindowDidResignKeyNotification看看它们中的任何一个是否有效,但没有一个有效。

4

1 回答 1

11

您可能没有收到通知,因为您实际上从一开始就不是关键。您的窗口似乎是无边框的,默认情况下,无边框窗口不会获取关键窗口状态。

在您的窗口子类中,请务必在以下方法上返回 YES:

- (BOOL)canBecomeKeyWindow { 
    return YES; 
}

- (BOOL)canBecomeMainWindow { 
    return YES; 
}
于 2012-12-31T01:15:15.017 回答