objective-c - 如何在 Cocoa 上的 MenuItem 上显示多个键或 'chords'

标签 objective-c macos cocoa menuitem

我正在尝试在 cocoa 中的 MenuItem 上显示多个组合键。这通常被称为“和弦”。

例如,我想添加一个如下所示的菜单项: “操作 1 控制 K、F”或“菜单项 2 K、L”

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

最佳答案

标准 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

这是否是一个充满 subview 的普通 NSView,以编程方式创建或什至从 NIB 文件加载,或者这是否是绘制所有内容的 NSView 的子类由您决定,所有这些变体都将真正发挥作用。通常,最简单的方法是使用 NIB 文件并在界面生成器中构建菜单外观并使用自动布局。

但请记住,这违反了 Apple 人机界面指南。它违反了用户的期望,因为他的所有其他应用程序都没有提供任何类似的功能,因为在 macOS 中,菜单项只有一个等效键,或者没有。它还破坏了用户自定义按键的能力,相当于他对所有其他应用程序执行此操作的方式(系统偏好设置>键盘>快捷方式>应用程序快捷方式)。

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

关于objective-c - 如何在 Cocoa 上的 MenuItem 上显示多个键或 'chords',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52535890/

相关文章:

objective-c - 扩展 NSTextView 还是实现 NSTextInputClient?

swift - 如何在远离系统栏的地方打开一个NSPopover?

objective-c - Objective-C中方法旁边的加号和减号是什么意思?

c++ - 将 OpenCV 添加到 iOS 应用程序

macos - 如何在 macOS SwiftUI 中创建默认按钮?

ruby-on-rails - 更新到最新的 OS X 后出现 Postgres 错误

objective-c - 我可以使用 NSDictionaryController 作为字典的字典吗?

ios - removeItemAtPath 文件大小

objective-c - 使用 tableHeader TVOS 重新加载 tableView 时断言失败

macos - 在 Mac OS X 上模拟用户