在MacOS开发中,设置快捷键是必不可少的,这里总结了两种方法。
方法一:在IB中快速设置
如果将快捷键设置为MacAPP默认的,用户不可以更改的快捷键,推荐使用这种方法,十分便捷。具体就是在StoryBoard中为NSMenuItem设置KeyEquivalent属性,简单直接。如下图:
方法二:代码实现快捷键设置
允许用户设置快捷键的话,推荐使用这种方法。首先引入Carbon.framework
, 具体方法如下:
// 注册快捷键
- (void)costomHotKey {
// 1、声明相关参数
EventHotKeyRef myHotKeyRef;
EventHotKeyID myHotKeyID;
EventTypeSpec myEvenType;
myEvenType.eventClass = kEventClassKeyboard; // 键盘类型
myEvenType.eventKind = kEventHotKeyPressed; // 按压事件
// 2、定义快捷键
myHotKeyID.signature = 'yuus'; // 自定义签名
myHotKeyID.id = 4; // 快捷键ID
// 3、注册快捷键
// 参数一:keyCode; 如18代表1,19代表2,21代表4,49代表空格键,36代表回车键
// 快捷键:command+4
RegisterEventHotKey(21, cmdKey, myHotKeyID, GetApplicationEventTarget(), 0, &myHotKeyRef);
// 快捷键:command+option+4
// RegisterEventHotKey(21, cmdKey + optionKey, myHotKeyID, GetApplicationEventTarget(), 0, &myHotKeyRef);
// 5、注册回调函数,响应快捷键
InstallApplicationEventHandler(&hotKeyHandler, 1, &myEvenType, NULL, NULL);
}
// 4、自定义C类型的回调函数
OSStatus hotKeyHandler(EventHandlerCallRef nextHandler, EventRef anEvent, void *userData) {
EventHotKeyID hotKeyRef;
GetEventParameter(anEvent, kEventParamDirectObject, typeEventHotKeyID, NULL, sizeof(hotKeyRef), NULL, &hotKeyRef);
unsigned int hotKeyId = hotKeyRef.id;
switch (hotKeyId) {
case 4:
// do something
NSLog(@"%d", hotKeyId);
break;
default:
break;
}
return noErr;
}
相关链接:
本文DEMO https://github.com/zhangzhaopds/KeyEquivalentDemo.git
参考 http://alvinzhu.me/blog/2013/11/05/cocoakai-fa-an-jian-shi-jian-jian-ting/