NSWindow在失去焦点时未收到任何通知

时间:2012-12-31 00:45:53

标签: objective-c macos cocoa nswindow nsnotifications

我有一个自定义的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来查看是否有任何效果,但没有一个有效。

1 个答案:

答案 0 :(得分:9)

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

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

- (BOOL)canBecomeKeyWindow { 
    return YES; 
}

- (BOOL)canBecomeMainWindow { 
    return YES; 
}