如何在Cocoa上为MenuItem显示多个键或“和弦”

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

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

例如,我想添加一个看起来像这样的菜单项:“Action1 Control K,F”或“MenuItem2 K,L”

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

objective-c macos cocoa menuitem
2个回答
1
投票

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

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

带有视图的菜单项不会绘制其标题,状态,字体或其他标准图形属性,并将绘图责任完全分配给视图。键盘等效和类型选择继续使用等效键和标题正常。

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

这是一个正常的NSView填充子视图,以编程方式创建,甚至从NIB文件加载,或者这是否是NSView的子类绘制一切本身取决于你,所有这些变化实际上都有效。通常,最简单的方法是使用NIB文件并在界面构建器中构建菜单外观并使用autolayout。

但请记住,这违反了Apple Human Interface准则。它违反了用户的期望,因为他的所有其他应用程序都没有提供任何可比性,因为在macOS中菜单项具有一个等效键或者没有。它还会破坏用户自定义密钥的能力,这与他用于所有其他应用程序的方式相同(系统偏好设置>键盘>快捷方式>应用程序快捷方式)。

通常你不应该用你自己的UI替换系统标准UI,除非你真的有这么做的理由,因为这总是打破了用户的期望,某些系统功能将无法按预期工作(例如可访问性功能)并且它会破坏统一系统的外观和感觉。它也会自动打破系统,你可以在macOS 10.14(Mojave)中看到所有系统标准UI自动支持暗模式,所以如果你只使用标准UI,你的应用程序支持黑暗模式而不做任何修改,但所有自定义UI都需要为暗模式再次定制。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.