2

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

我进行了子类化NSApplication和拦截sendEvent:,以查看我的应用程序是否在第一次单击事件期间获取了事件,并且确实如此。此外,我转储了响应者链,发现我的视图确实在链中,但直到第二次单击,窗口才成为关键。我还注意到,当我收到第一个点击事件时,应用程序甚至都没有处于活动状态。这怎么可能?应用程序在收到鼠标事件时不应该激活吗?鸡蛋...

有什么想法/建议吗?

更新:通读文档后,我发现:

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

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

谢谢!

4

1 回答 1

0

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

- (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 {
   // 
}
于 2015-02-02T02:10:01.717 回答