objective-c - NSMenuItem、自定义 View 和 mouseUp 的奇怪问题 :

标签 objective-c macos cocoa nsmenuitem nsmenu

我在使用 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/

相关文章:

cocoa - NSView 框架通过 -setFrame : following autoresizing 以外的方式设置

objective-c - 如果链接的框架包含私有(private) header ,Xcode 项目会提示丢失文件

cocoa - 如何在 XCode 4 中连接到文件所有者的 ManagedObjectContext 对象

ios - 我如何从 SEL 中获取参数类型

iphone - 为什么我的 ASIHTTPRequest 文件显示 ARC 错误?

ios - 如何使用核心数据创建递归的一对多关系?

macos - 在 shell 脚本中使用 gimp color-to-alpha 脚本

objective-c - 如何获取文件列表 Google Drive API IOS?

objective-c - Objective-C 中的泛型类型

macos - Cocoa 框架、库和包的优缺点是什么?