2013-02-25 90 views
8

我在这里有一个NSMenu非常非常奇怪的问题。NSMenuItem,自定义视图和mouseUp的奇怪问题:

大约有一半的NSMenuItems通过NSMenuItem上的setView:方法对它们使用自定义视图。在这个自定义视图中,我已经实现了mouseUp:当用户点击菜单项时捕获,并且这在我第一次打开菜单时完全起作用。

虽然第二次,如果我点击时按住鼠标稳定,mouseUp不会在任何这些菜单项上被调用。但是,如果我点击,然后稍微移动光标,并释放mouseUp被调用。因此,出于某种原因,某些事件正在拦截这些事件,但仅在菜单第二次出现时才会发生,并且如果光标在mouseDown事件之后移动,则会通过该事件。 (出于某种原因,mouseDown永远不会被调用,在菜单的第一次或第二次出现时)。

有人有什么线索可以在这里发生什么?什么是拦截我的鼠标事件,为什么它们会在菜单的第一次出现时通过我的自定义视图,而不是第二次?

+0

同样经历,如果我双击(然后在菜单的第二个外观上调用mouseUp两次)。 – 2013-02-25 20:09:17

+0

所以我必须在这个视图顶部的NSTextViews。那些正在获得mouseDown,但他们也在他们的超级视图的同时开始失败。这几乎就像NSMenu拦截鼠标事件的顶部。 – 2013-02-25 21:42:13

回答

3

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

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

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

    [self updateTrackingAreas]; 
} 

更多情况下,看看这个链接:http://openradar.appspot.com/7128269