9

我在这里遇到了一个非常奇怪的 NSMenu 问题。

我使用的大约一半的 NSMenuItems 通过 NSMenuItem 上的 setView: 方法对它们有自定义视图。在这个自定义视图中,我实现了 mouseUp: 来捕捉用户单击菜单项的时间,这在我第一次打开菜单时非常有效。

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

有人对这里可能发生的事情有任何线索吗?是什么拦截了我的鼠标事件,为什么它们会在菜单第一次出现时传递到我的自定义视图,但不是在第二次出现?

4

1 回答 1

7

我有同样的问题。原来问题是我在第一次菜单点击后启动了一个外部应用程序,当菜单再次打开时,它的窗口不再是关键。将此方法添加到我在菜单项中使用的 NSView 子类解决了问题:

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

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

    [self updateTrackingAreas];
}

有关更多上下文,请查看此链接: http: //openradar.appspot.com/7128269

于 2013-10-04T18:47:19.010 回答