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

Ped*_*ira 8 macos cocoa objective-c nsnotifications 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];
}
Run Code Online (Sandbox Code Playgroud)

我打电话[_window setupWindowForEvents];windowDidResignKey永远不会被叫.
这就是我调用NSWindow的方式:当单击状态栏项目时,我makeKeyAndOrderFront和窗口显示在状态栏项目的正下方,如下所示:在此输入图像描述

当窗口失去焦点时,我没有得到任何通知的任何想法?我已经使用了两者NSWindowDidResignMainNotification,NSWindowDidResignKeyNotification看看这些是否有效,但没有一个有效.

sud*_*-rf 9

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

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

- (BOOL)canBecomeKeyWindow { 
    return YES; 
}

- (BOOL)canBecomeMainWindow { 
    return YES; 
}
Run Code Online (Sandbox Code Playgroud)

  • 好问题.关键窗口是当前具有第一响应者状态并响应用户输入的窗口.主窗口就像关键窗口,除了它们不一定需要具有第一响应者状态.这两个州似乎都很专注 这可能对您有用:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/WinPanel/Concepts/ChangingMainKeyWindow.html (4认同)