gpt4 book ai didi

cocoa - -快捷记录器:keyComboDidChange: isn’t executed

转载 作者:行者123 更新时间:2023-12-03 17:15:31 28 4
gpt4 key购买 nike

我正在编写一个Cocoa应用程序,我想实现一个全局热键功能。我实现了 Waffle Software 的 ShortcutRecorder.framework,并向我的 xib 添加了一个 customView。然后我将 CustomView 子类化为 SRRecorderControl。现在我在窗口中看到了记录器,但是如何获取 KeyCombo 以及如何对此使用react?

我实现了 keyComboDidChange 方法,但没有运气获得 key 代码。我做错了什么?

这是我获取 key 代码的代码:

- (void)shortcutRecorder:(SRRecorderControl *)aRecorder keyComboDidChange:(KeyCombo)newKeyCombo
{
if (aRecorder == shortcutRecorder)
{
NSLog{"We got a new Key Combo");
}
}

shortcutrecorder 是我的 IBOutlet 顺便说一句。

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

编辑添加

实际上,我已经在 Preferences.h 中声明了我的快捷方式记录器导出。然后在身份检查器中,我将“首选项”作为文件所有者的自定义类放入,并将委托(delegate)连接到我的快捷方式记录器...但 keyComboDidChange 从未被调用...我不明白为什么。

最佳答案

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

  • 创建窗口 xib
  • 在我的例子中,该类的文件所有者是 PreferencesWindowController
  • 通过右键单击窗口并将其拖动到文件所有者,创建从窗口到文件所有者的引用导出
  • 将自定义 View 添加到您的窗口
  • 您必须将 ShortcutRecorder 的委托(delegate)连接到“文件所有者”。为此,请右键单击 SRRecorderControl 并将委托(delegate)拖动到左侧的“文件所有者”。

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

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

  • 监听来自 ShortcutRecorder 的事件(您已经这样做了,但没有设置委托(delegate))
  • 检查 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 中,以便在每次应用程序启动时加载它们。

关于cocoa - -快捷记录器:keyComboDidChange: isn’t executed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7849469/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com