【问题标题】:Key Equivalent NSTextfield like Interface BuilderKey Equivalent NSTextfield 类似 Interface Builder
【发布时间】:2013-02-09 19:35:43
【问题描述】:

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

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

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

这给我留下了以下问题:

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

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

-其他应用程序如何实现这一点,使其在此处可见:

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

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

提前致谢, 弗兰斯

【问题讨论】:

    标签: objective-c cocoa


    【解决方案1】:

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

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

    NSEventmodifierFlags 的简单检查应该足以将修饰键状态转换为像⌥⇧⌘这样的字符串:

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

    您可能还想查看 Allan Odgaard 的博客文章 "Deciphering an NSEvent",了解他开发的用于决定按下哪些键的启发式算法。

    【讨论】:

    • 感谢您的反应,对我迟到的回复感到抱歉。我将浏览所有这些文档,但不幸的是我现在没有太多时间。我还发现:cocoacontrols.com/platforms/mac-os-x/controls/shortcutrecorder,好像这是一个更新版本,所以我也会研究那个项目。一旦我有时间完成所有这些,我会在这里发布!
    • 希望对您有所帮助。我不太明白你的评论,但如果我的帖子没有解决你的问题,请不要给它打勾。只需点赞(数字上方的箭头)表示它很有帮助。
    猜你喜欢
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 2010-11-18
    • 2014-08-12
    • 2013-03-01
    • 1970-01-01
    • 2012-11-26
    相关资源
    最近更新 更多