2012-11-07 32 views
1

在我的应用程序中,我有三个NSImageView。当用户右键单击imageview时,我正在显示一个NSMenu其中两个NSMenuItem s“添加照片”,“删除照片”。由于我有三个ImageView我需要知道哪个imageview显示菜单。所以我可以只为那个imageview做我的东西。找到显示在右键点击的NSMenu位置

那么我该如何做到这一点?我无法在窗口中找到NSMenu的位置。

回答

1

如果您知道当您的应用程序中出现上下文(右键单击)菜单,那么您应该能够获取发生的原始“NSEvent”数据。要检测它发生的情况,您有几个选项(like overriding "rightMouseDown:" in your "NSWindow" subclass)

在该“NSEvent”中,您可以获取locationInWindow(我已经为您链接了Apple文档)。通过这些信息,您可以检查鼠标是否落在三个图像视图框架的边界内。

然后你就会知道要添加或删除哪张照片。

+0

我已将菜单与xib中的图像连接在一起。所以当我右键点击imageview时,rightMouseUp函数不会被调用。它只是显示菜单。在imageview框架以外的区域中,rightMouseUp函数被调用。 –

+0

你也可以继承你的“NSImageView'”并覆盖'menuForEvent'(我链接的答案中的另一种可能性)。如果您可以在图像视图中执行此操作,那么您将知道(例如,从标题或其他属性)哪个图像视图发生了菜单事件。 –

+0

如果这是不可能的,那么我会通过编程的方式在rightMouseUp事件而不是xib中显示菜单。我认为它比继承ImageView更好。 –