Xcode 键盘布局和快捷键

问题描述 投票:0回答:1

在 macOS 应用程序项目中,从 Xcode 12(在 Catalina 上)过渡到 Xcode 13(在 Monterey 上),我遇到了菜单快捷方式的奇怪问题。我通常使用这些方法以编程方式添加菜单项的快捷方式:

    [menuItem setKeyEquivalent:@"1"];
    [menuItem setKeyEquivalentModifierMask:NSEventModifierFlagCommand]; 

使用 Xcode 12,结果是无论目标使用什么语言和输入源,快捷键都保持不变:因此,在这种情况下,Command-1 仍然是 Command-1(尽管它可能需要更多修饰键:在 Azerty 键盘上,需要使用 Shift 修饰符才能键入“1”,但这是隐式的,并不是快捷键的真正成员)。

现在,Xcode 13 似乎工作方式有所不同,因为对于相同的快捷方式,并使用法语 Azerty 键盘作为输入源,我在菜单项中读取 ⌘& 而不是 ⌘1(在 Azerty 键盘上,' &' 是与 Querty 键盘上的 '1' 位于相同位置的字符)。

由于这一更改,我使用键盘顶行的数字或特殊字符以及底行的一些特殊字符的所有快捷键在与 Azerty 输入源一起使用时会产生错误的快捷键。

这是 macOS 12 上的预期行为吗?是否仍然可以在输入源之间保持相同的快捷方式,而不是像现在一样保持相同的键代码?

任何帮助表示赞赏

objective-c xcode appkit macos-monterey keyboard-layout
1个回答
0
投票

我应该在发布这个问题之前阅读文档,但是,对于对此主题感兴趣的任何人,这里是解决方案。

Apple 在 macOS12 上向 NSMenuItem 引入了一个新属性:allowsAutomaticKeyEquivalentLocalization,默认情况下为 YES,并按照我观察到的方向更改行为。将其添加到我用来构建菜单项的方法中解决了该问题:

    if (@available(macOS 12, *))
        [item setAllowsAutomaticKeyEquivalentLocalization:NO];
© www.soinside.com 2019 - 2024. All rights reserved.