我在NSMenu有一个非常奇怪的问题。
我使用的大约一半NSMenuItem通过NSMenuItem上的setView:方法对它们进行自定义视图。在这个自定义视图中,我实现了mouseUp:当用户点击菜单项时捕获,这在我第一次打开菜单时完美地运行。
第二次,如果我在点击时保持鼠标稳定,则不会在任何这些菜单项上调用mouseUp。但是,如果我单击下来,然后稍微移动光标,并释放mouseUp被调用。所以出于某种原因,有些事情正在拦截这些事件,但只有第二次出现菜单,如果光标在mouseDown事件之后移动,它就会通过。 (出于某种原因,在菜单的第一次或第二次出现时,mouseDown永远不会被调用。)
任何人都知道这里可能会发生什么?什么是拦截我的鼠标事件,为什么它们会在菜单的第一次出现时传递到我的自定义视图,而不是第二次出现?
答案 0 :(得分:3)
我遇到了同样的问题。事实证明问题是我在第一次单击菜单后启动了外部应用程序,当菜单再次打开时,其窗口不再是键。将此方法添加到NSView子类我使用菜单项内部修复了问题:
- (void)viewWillMoveToWindow:(NSWindow *)newWindow;
{
[super viewWillMoveToWindow:newWindow];
if ( newWindow != nil && ![newWindow isKeyWindow] )
[newWindow becomeKeyWindow];
[self updateTrackingAreas];
}
有关更多背景信息,请查看此链接:http://openradar.appspot.com/7128269