如何为 Cocoa 上的 MenuItem 显示多个键或 'chords'

How to display multiple keys or 'chords' for a MenuItem on Cocoa

我正在尝试向 cocoa 中的 MenuItem 显示多个组合键。这通常称为 "chords"。

例如,我想添加一个如下所示的菜单项: "Action1 Control K, F" 或 "MenuItem2 K,L"

这在 Objective-C 中是否可以通过标准 API 实现?我环顾四周,在 MacOS 上与此最接近的是使用自定义视图。这是允许此功能的方法吗?

是的,您需要使用自定义视图。 NSMenuItem 只显示其 keyEquivalent 的第一个字符。

标准API不支持处理和弦,因此不允许将和弦设置为等效键,因此也无法将和弦显示为等效键。

如果您需要该功能,则需要完全自己实施。只需创建自己的 NSView 对象并将其分配给 NSMenuItemview 属性。如文档所述,您必须自己绘制所有内容:

A menu item with a view does not draw its title, state, font, or other standard drawing attributes, and assigns drawing responsibility entirely to the view. Keyboard equivalents and type-select continue to use the key equivalent and title as normal.

来源:https://developer.apple.com/documentation/appkit/nsmenuitem/1514835-view?language=objc

这是否是普通的 NSView 填充子视图,以编程方式创建或什至从 NIB 文件加载,或者这是否是 NSView 的子类绘制一切本身取决于你,所有这些变体实际上都会起作用。通常最简单的方法是使用 NIB 文件并在界面生成器中构建菜单外观并使用自动布局。

但请记住,这违反了 Apple 人机界面准则。这违反了用户的期望,因为他的所有其他应用程序都没有提供任何可比性,因为在 macOS 中,菜单项具有一个等效键或具有 none。它还打破了用户自定义键的能力,就像他为所有其他应用程序所做的那样(系统偏好设置>键盘>快捷方式>应用程序快捷方式)。

通常你不应该用你自己的 UI 替换系统标准 UI 除非你真的有很好的理由这样做,因为这总是打破用户的期望,某些系统功能不会按预期工作(例如辅助功能),它破坏了系统的统一外观和感觉。它还会破坏系统自动,正如您在 macOS 10.14 (Mojave) 中看到的那样,其中所有系统标准 UI 自动支持暗模式,因此如果您仅使用标准 UI,您的应用程序无需任何修改即可支持暗模式, 然而所有的自定义 UI 都需要再次为深色模式自定义。