我在使用 NSMenu 时遇到了一个非常非常奇怪的问题。
我使用的 NSMenuItem 中有大约一半通过 NSMenuItem 上的 setView: 方法自定义 View 。在这个自定义 View 中,我实现了 mouseUp: 以在用户单击菜单项时进行捕获,这在我第一次打开菜单时非常有效。
第二次,如果我在单击时保持鼠标稳定,则不会在任何这些菜单项上调用 mouseUp。但是,如果我向下单击,然后稍微移动光标,然后释放 mouseUp 就会被调用。所以出于某种原因,某些东西正在拦截这些事件,但只是第二次出现菜单,如果光标在 mouseDown 事件之后移动,它就会通过。 (由于某些原因,mouseDown 从未在菜单的第一次或第二次出现时被调用)。
有人知道这里可能发生了什么吗?什么在拦截我的鼠标事件,为什么它们在菜单第一次出现时传递到我的自定义 View ,但在第二次出现时却没有传递到我的自定义 View ?
最佳答案
我遇到了同样的问题。原来问题是我在第一次点击菜单后启动了一个外部应用程序,当菜单再次打开时,它的窗口不再是关键。将此方法添加到我在菜单项中使用的 NSView 子类解决了这个问题:
- (void)viewWillMoveToWindow:(NSWindow *)newWindow;
{
[super viewWillMoveToWindow:newWindow];
if ( newWindow != nil && ![newWindow isKeyWindow] )
[newWindow becomeKeyWindow];
[self updateTrackingAreas];
}
有关更多上下文,请查看此链接:http://openradar.appspot.com/7128269
关于objective-c - NSMenuItem、自定义 View 和 mouseUp 的奇怪问题 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15075033/