我有一个奇怪的问题,我点击了我的窗口。它取消了主要和关键。然后我单击返回它,单击的视图不响应鼠标单击。但第二次点击确实会导致视图响应。好像在第一次点击期间,窗口不是键,点击使其成为键,并且能够处理第二次点击。
我将NSApplication
子类化并拦截sendEvent:
以查看我的应用程序是否在第一次点击事件期间获取了事件,事实确实如此。此外,我抛弃了响应链,看到我的视图确实在链中,但是在第二次点击之前窗口不是关键。我还注意到,当我收到第一个单击事件时,应用程序甚至都没有激活。这怎么可能?应用程序在收到鼠标事件时是否应该变为活动状态?鸡/蛋......
有任何想法/建议吗?
更新:在阅读完文档后,我发现了这一点:
当用户在光标位于视图对象上时按下鼠标按钮时,将发送鼠标按下事件。如果包含视图的窗口不是关键窗口,则窗口将成为关键窗口并丢弃鼠标按下事件。但是,视图可以通过覆盖NSView的acceptsFirstMouse:方法来返回YES来规避此默认行为。
所以这似乎正在发生的事情。但是,我尝试覆盖acceptsFirstMouse:
和acceptsFirstResponder
,但无济于事。我的观点仍然没有“接受第一只老鼠”。
谢谢!
答案 0 :(得分:0)
>在您的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 {
//
}