【问题标题】:NSWindow is not receiving any notification when it loses focusNSWindow 失去焦点时没有收到任何通知
【发布时间】:2012-12-31 00:45:52
【问题描述】:

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

【问题讨论】:

    标签: objective-c macos cocoa nswindow nsnotifications


    【解决方案1】:

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

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

    - (BOOL)canBecomeKeyWindow { 
        return YES; 
    }
    
    - (BOOL)canBecomeMainWindow { 
        return YES; 
    }
    

    【讨论】:

    • 非常感谢,完全忘记了这一点。顺便说一句,你能解释一下通知NSWindowDidResignMainNotificationNSWindowDidResignKeyNotification之间的区别吗?
    • 好问题。关键窗口是当前具有第一响应者状态并响应用户输入的窗口。主窗口就像关键窗口一样,除了它们不一定需要具有第一响应者状态。这两个州似乎都很专注。这可能对你有用:developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多