我正在编写一个Cocoa应用程序,我想实现一个全局热键功能。 我实现了Waffle Software的ShortcutRecorder.framework,并在我的xib中添加了一个customView。然后我将CustomView子类化为SRRecorderControl。现在我在我的窗口中看到了Recorder,但是如何获得KeyCombo以及如何对此做出反应呢?
我实现了keyComboDidChange方法而没有运气来获取密钥代码。我做错了什么?
以下是获取密码的代码:
- (void)shortcutRecorder:(SRRecorderControl *)aRecorder keyComboDidChange:(KeyCombo)newKeyCombo
{
if (aRecorder == shortcutRecorder)
{
NSLog{"We got a new Key Combo");
}
}
shortcutrecorder是我的IBOutlet btw。
我是否必须实现协议或setDelegate:self或类似的东西?
已编辑添加
其实我在Preferences.h中声明了我的shortcutRecorder插座。然后在Identity Inspector中我将“Preferences”作为文件所有者的自定义类,并将委托连接到我的Shortcut Recorder ......但是keyComboDidChange永远不会被调用...我不明白为什么。
答案 0 :(得分:1)
让我解释一下我采取的步骤:
在此之后:ShortcutRecorder仅记录热键并将其留给您如何使用它。您需要使用PTHotKeyCenter(随ShortcutRecorder一起提供),或者您可以自己实现快捷方式处理。
ShortcutRecorder包含一个很棒的演示,演示了如何将ShortcutRecorder与PTHotKeyCenter结合使用。它的工作原理如下:
小样本,来源:
if (globalHotKey != nil)
{
[[PTHotKeyCenter sharedCenter] unregisterHotKey: globalHotKey];
[globalHotKey release];
globalHotKey = nil;
}
globalHotKey = [[PTHotKey alloc] initWithIdentifier:@"SRTest"
keyCombo:[PTKeyCombo keyComboWithKeyCode:[shortcutRecorder keyCombo].code
modifiers:[shortcutRecorder cocoaToCarbonFlags: [shortcutRecorder keyCombo].flags]]];
[globalHotKey setTarget: self];
[globalHotKey setAction: @selector(hitHotKey:)];
[[PTHotKeyCenter sharedCenter] registerHotKey: globalHotKey];
唯一要做的就是热键处理程序:
- (void)hitHotKey:(PTHotKey *)hotKey
{
NSLog(@"Hotkey pressed!");
}
您可以轻松地将热键设置保存到UserDefaults,以便在每次应用程序启动时加载它们。
答案 1 :(得分:0)
其实我在Preferences.h中声明了我的shortcutRecorder插座。然后在Identity Inspector中我将“Preferences”作为文件所有者的自定义类,并将委托连接到我的Shortcut Recorder ......但是keyComboDidChange永远不会被调用...我不明白为什么-.-