NSMenuItem,自定义视图和mouseUp的奇怪问题:

时间:2013-02-25 19:38:06

标签: objective-c macos cocoa nsmenuitem nsmenu

我在NSMenu有一个非常奇怪的问题。

我使用的大约一半NSMenuItem通过NSMenuItem上的setView:方法对它们进行自定义视图。在这个自定义视图中,我实现了mouseUp:当用户点击菜单项时捕获,这在我第一次打开菜单时完美地运行。

第二次,如果我在点击时保持鼠标稳定,则不会在任何这些菜单项上调用mouseUp。但是,如果我单击下来,然后稍微移动光标,并释放mouseUp被调用。所以出于某种原因,有些事情正在拦截这些事件,但只有第二次出现菜单,如果光标在mouseDown事件之后移动,它就会通过。 (出于某种原因,在菜单的第一次或第二次出现时,mouseDown永远不会被调用。)

任何人都知道这里可能会发生什么?什么是拦截我的鼠标事件,为什么它们会在菜单的第一次出现时传递到我的自定义视图,而不是第二次出现?

1 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。事实证明问题是我在第一次单击菜单后启动了外部应用程序,当菜单再次打开时,其窗口不再是键。将此方法添加到NSView子类我使用菜单项内部修复了问题:

- (void)viewWillMoveToWindow:(NSWindow *)newWindow;
{
    [super viewWillMoveToWindow:newWindow];

    if ( newWindow != nil && ![newWindow isKeyWindow] )
        [newWindow becomeKeyWindow];

    [self updateTrackingAreas];
}

有关更多背景信息,请查看此链接:http://openradar.appspot.com/7128269