Cocoa -shortcutRecorder:keyComboDidChange:isn’;不执行

Cocoa -shortcutRecorder:keyComboDidChange:isn’;不执行,cocoa,global-hotkey,Cocoa,Global Hotkey,我正在编写一个Cocoa应用程序,我想实现一个全局热键函数。 我从华夫格软件中实现了ShortcutRecorder.framework,并在我的xib中添加了一个customView。然后我将CustomView子类化为SRRecorderControl。现在我在我的窗口中看到了录音机,但是我如何才能得到按键组合,以及如何对此做出反应 我实现了keyComboDidChange方法,但没有幸运地获得keycode。我做错了什么 以下是我获取密钥代码的代码: - (void)shortcutRe

我正在编写一个Cocoa应用程序,我想实现一个全局热键函数。 我从华夫格软件中实现了ShortcutRecorder.framework,并在我的xib中添加了一个customView。然后我将CustomView子类化为SRRecorderControl。现在我在我的窗口中看到了录音机,但是我如何才能得到按键组合,以及如何对此做出反应

我实现了keyComboDidChange方法,但没有幸运地获得keycode。我做错了什么

以下是我获取密钥代码的代码:

- (void)shortcutRecorder:(SRRecorderControl *)aRecorder keyComboDidChange:(KeyCombo)newKeyCombo
{
    if (aRecorder == shortcutRecorder)
    {
        NSLog{"We got a new Key Combo");
    }
}
shortcutrecorder是我的IBOutlet顺便说一句

我必须实现协议或setDelegate:self或类似的东西吗

编辑以添加


实际上,我已经在我的首选项中声明了我的shortcutRecorder outlet。然后在Identity Inspector中,我将“Preferences”作为文件所有者的自定义类,并将代理连接到我的快捷方式记录器。。。但是这个改变从来没有被称为。。。我不明白为什么。

让我解释一下我为让它工作所采取的步骤:

  • 创建一个窗口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,以便在每次启动应用程序时加载它们。

让我解释一下我为使其正常工作所采取的步骤:

  • 创建一个窗口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,以便在每次启动应用程序时加载它们。

实际上,我已经在首选项中声明了我的shortcutRecorder outlet。h。然后在Identity Inspector中,我将“Preferences”作为文件所有者的自定义类,并将代理连接到我的快捷方式记录器。。。但是这个改变从来没有被称为。。。我不明白为什么-。-

实际上我已经在我的首选项中声明了我的shortcutRecorder outlet。然后在Identity Inspector中,我将“Preferences”作为文件所有者的自定义类,并将代理连接到我的快捷方式记录器。。。但是这个改变从来没有被称为。。。我不明白为什么-。-

请不要添加答案只是为了给你的问题添加信息-你最好编辑你的问题来添加澄清。好吧,对不起,我不知道。。不管怎样,你也能给我一个答案吗?!;)请不要添加答案只是为了向您的问题添加信息-您最好编辑您的问题以添加澄清确定抱歉,我不知道。。不管怎样,你也能给我一个答案吗?!;)哦,我仍然有这个问题,我不明白为什么它不起作用。我真的需要你的帮助;)我做错了什么?非常感谢你的回答。我把我的答案扩大了一点。你现在能弄明白吗?如果它对你有帮助,你介意把我的答案标为正确吗?谢谢哦,我仍然有这个问题,我不明白为什么它不起作用。我真的需要你的帮助;)我做错了什么?非常感谢你的回答。我把我的答案扩大了一点。你现在能弄明白吗?如果它对你有帮助,你介意把我的答案标为正确吗?谢谢