1

在过去的两天里,我一直在搜索和阅读很多关于应该非常简单的东西。很明显情况并非如此:我正在尝试这样做:

IB中的关键等效字段

就这样。我知道快捷记录器已经很老了,我一直在使用 MASShortcut 的演示。MASShortcut 非常棒,但是对于看似简单的事情却有很多代码。

我还搜索了很多 Apple 示例代码(希望他们会在 Interface Builder 以外的地方实现它,但到目前为止还没有运气)。

这给我留下了以下问题:

- 是否有任何文件可以澄清其中的一些内容?或者还有其他比 MASShortcut 更简单的解决方案吗?

- 我一直在尝试自己复制 IB 控件之类的东西,但我仍然坚持将按下的键“转换”为 NSTextField 中的字符(或者它是 IB 中的自定义 NSView?)。Apple 是否提供了一种简单的方法来做到这一点?因为使用 sendEvent 捕获所有内容并将其与所有键的列表进行比较似乎需要做很多工作,我想知道苹果程序员是如何在上面看到的控件中做到这一点的。如果这是唯一的解决方案,我在使用它时是否应该关注不同的键盘布局?

- 其他应用程序如何实现这一点,使其在此处可见: 系统偏好设置 > 键盘

如您所见,TextWranglers 出现在这里,当我在我的应用程序中调用“[NSEvent addGlobalMonitorForEventsMatchingMask:]”时会自动发生这种情况吗?

这些问题很多,我只是希望你们中的一个人能指出我正确的方向。

提前致谢, 弗兰斯

4

1 回答 1

3

上周我自己在摆弄从按键中获取字符,我偶然发现了两个由于某种原因我以前从未见过的函数:UCKeyTranslate()在 CoreServices 中和在 ApplicationServices 中明显相关的CGEventKeyboardGetUnicodeString()(看起来像前者的包装器)。

似乎这些是 Apple 自己的文本系统用来将按键转换为 Unicode 字符串以显示为文本的功能——或者至少是代码。

NSEvent对's的简单检查modifierFlags就足以将修饰键状态转换为像 ⌥⇧⌘ 这样的字符串:

NSUInteger flags = [theEvent modifierFlags];
NSString * modString = [NSString stringWithFormat:@"%@%@%@%@",
                                (flags & NSControlKeyMask) ? @"^" : @"",
                                (flags & NSAlternateKeyMask) ? @"⌥" : @"",
                                (flags & NSShiftKeyMask) ? @"⇧" : @"",
                                (flags & NSCommandKeyMask) ? @"⌘" : @""];

您可能还想查看 Allan Odgaard 的博客文章“解密 NSEvent”,了解他为决定按下哪些键而开发的启发式算法。

于 2013-02-09T19:55:12.727 回答