关键等效NSTextfield,如Interface Builder

时间:2013-02-09 19:35:43

标签: objective-c cocoa

过去两天我一直在搜索和阅读很多关于应该非常简单的事情。很明显,事实并非如此:我试图做到这一点:

Key Equivalent field in IB

这就是全部。我知道捷径记录器已经很老了,而且我一直在使用MASShortcut的演示。 MASShortcut非常棒,但是很多代码看起来很简单。

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

这给我留下了以下问题:

- 是否有任何文件可以澄清一些这些东西?还是有其他比MASShortcut更简单的解决方案?

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

- 其他应用程序如何实现此功能,以便在此处显示: System Preferences > Keyboard

正如你可以看到TextWranglers出现在这里,当我调用" [NSEvent addGlobalMonitorForEventsMatchingMask:]"时会自动发生这种情况。在我的申请中?

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

提前致谢, 反

1 个答案:

答案 0 :(得分:2)

上周我自己正在摆弄关键按键的角色,我偶然发现了两个函数,这些函数由于某些原因我以前没有见过:CoreServices中的UCKeyTranslate()和明显相关的CGEventKeyboardGetUnicodeString() (看起来像前者的包装器)在ApplicationServices中。

似乎这些是函数 - 或者至少是代码 - Apple自己的文本系统用来将按键翻译成Unicode字符串以显示为文本。

NSEvent的{​​{1}}进行简单检查就足以将修饰键状态转换为字符串,如⌥⇧⌘:

modifierFlags

您可能还想看看Allan Odgaard的博客文章"Deciphering an NSEvent",了解他为确定按下哪些按键而开发的启发式游戏。