Cocoa NSApplication未激活但接收鼠标事件

时间:2011-12-22 14:23:05

标签: cocoa nswindow nsapplication nsresponder

我有一个奇怪的问题,我点击了我的窗口。它取消了主要和关键。然后我单击返回它,单击的视图不响应鼠标单击。但第二次点击确实会导致视图响应。好像在第一次点击期间,窗口不是键,点击使其成为键,并且能够处理第二次点击。

我将NSApplication子类化并拦截sendEvent:以查看我的应用程序是否在第一次点击事件期间获取了事件,事实确实如此。此外,我抛弃了响应链,看到我的视图确实在链中,但是在第二次点击之前窗口不是关键。我还注意到,当我收到第一个单击事件时,应用程序甚至都没有激活。这怎么可能?应用程序在收到鼠标事件时是否应该变为活动状态?鸡/蛋......

有任何想法/建议吗?

更新:在阅读完文档后,我发现了这一点:

  

当用户在光标位于视图对象上时按下鼠标按钮时,将发送鼠标按下事件。如果包含视图的窗口不是关键窗口,则窗口将成为关键窗口并丢弃鼠标按下事件。但是,视图可以通过覆盖NSView的acceptsFirstMouse:方法来返回YES来规避此默认行为。

所以这似乎正在发生的事情。但是,我尝试覆盖acceptsFirstMouse:acceptsFirstResponder,但无济于事。我的观点仍然没有“接受第一只老鼠”。

谢谢!

1 个答案:

答案 0 :(得分:0)

10.10中的

>在您的app委托中 - 您可以挂钩鼠标事件然后强制窗口变为活动状态。

- (void)applicationDidUpdate:(NSNotification *)notification {
     NSLog(@"did update");
    // [[NSApp mainWindow] makeKeyWindow];doesn't work. not sure why. 
    [[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
}

- (void)applicationDidResignActive:(NSNotification *)notification {
   // your window lost focus here
}

- (void)applicationDidBecomeActive:(NSNotification *)notification {
   // 
}