-shortcutRecorder:keyComboDidChange:未执行

时间:2011-10-21 12:36:03

标签: cocoa global-hotkey

我正在编写一个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永远不会被调用...我不明白为什么。

2 个答案:

答案 0 :(得分:1)

让我解释一下我采取的步骤:

  • 创建一个窗口xib
  • 在我的例子中,该类的文件所有者是PreferencesWindowController
  • 通过右键单击窗口并将其拖动到文件所有者
  • ,从窗口创建一个指向文件所有者的引用插座
  • 将自定义视图添加到您的窗口
  • 您必须将ShortcutRecorder的代理连接到“文件所有者”。为此,请右键单击SRRecorderControl并将代理拖动到左侧的“文件所有者”。

在此之后:ShortcutRecorder仅记录热键并将其留给您如何使用它。您需要使用PTHotKeyCenter(随ShortcutRecorder一起提供),或者您可以自己实现快捷方式处理。

ShortcutRecorder包含一个很棒的演示,演示了如何将ShortcutRecorder与PTHotKeyCenter结合使用。它的工作原理如下:

  • 收听来自ShortcutRecorder的事件(您已经做过,但没有设置代理)
  • 检查globalHotKey变量是否已设置
  • 如果是,请卸载以前的热键
  • 使用ShortcutRecorder
  • 中的设置初始化新热键
  • 设置目标和操作,以便在按下
  • 后实际捕获热键
  • 将热键保存到共享中心(从此刻开始,热键将起作用)

小样本,来源:

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永远不会被调用...我不明白为什么-.-