在Cocoa中模拟鼠标单击菜单项?

时间:2014-02-25 06:00:54

标签: objective-c macos cocoa keyboard-shortcuts

例如,我有一个NSMenuItem类型变量,其标题为“历史记录”。我需要键盘快捷键 Meta + h 来执行与单击此菜单项相同的操作(弹出子菜单列表)..

我认为可能有两种方法可以实现这一点:

1.将此菜单项绑定到键盘快捷键,然后Cocoa将在触发快捷方式时触发该操作属于该项目的执行

2.不绑定项目的键盘快捷键。为 Meta + h 创建一个EventHandler,当事件激活时,模拟鼠标单击菜单项。

但是,这两种方法现在都不起作用。

对于键盘快捷键,有一个名为setKeyEquivalent的方法,但它使用 Command 而不是 Meta 作为修饰符。其结果是执行操作绑定到菜单项,而不是弹出子菜单。

为了模拟鼠标点击,在Cocoa的NSMenuItem引用中,我还没有看到如何将click之类的事件发送到NSMenuItem ..

有没有人有这方面的想法?谢谢!

2 个答案:

答案 0 :(得分:2)

[menuItem setKeyEquivalent:@" "];  
[menuItem setKeyEquivalentModifierMask:0];  

使用任何这些修饰符键掩码(使用C按位OR运算符组合):

  • NSShiftKeyMask
  • NSAlternateKeyMask
  • NSCommandKeyMask
  • NSControlKeyMask

(BTW,Apple's docs非常有用!)

答案 1 :(得分:0)

你的问题有点不清楚 -

如果您设置了一个快捷方式,Cocoa将为您调用该命令,您的代码将永远不会知道用户是使用鼠标还是按键等效。

如果您想通过其他方式(NSView中的键等)调用相同的命令。你想要手动调用与菜单定义相关联的方法。