我有一个具有以下方法的自定义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
,并且窗口会显示在状态栏项目的正下方,如下所示:有什么想法为什么当窗口失去焦点时我没有收到任何通知?我同时使用了
NSWindowDidResignMainNotification
和NSWindowDidResignKeyNotification
来查看其中的任何一个是否有效,但没有一个起作用。 最佳答案
您可能没有收到通知,因为您实际上从来没有把 key 放在第一位。您的窗口似乎是无边界的,默认情况下,无边界的窗口不会捕获关键窗口的状态。
在您的窗口子类中,请确保在以下方法上返回YES:
- (BOOL)canBecomeKeyWindow {
return YES;
}
- (BOOL)canBecomeMainWindow {
return YES;
}