【问题标题】:Option (⌥) + Context Menu in Cocoa?可可中的选项(⌥)+上下文菜单?
【发布时间】:2015-11-18 07:47:22
【问题描述】:

在 Cocoa 应用程序中,有没有一种方法可以让用户在按住 Option (⌥) 键时轻松地在上下文菜单中显示其他或完全不同的选项?

这是在全局菜单栏中的音量上下文菜单中使用的:

在 Finder 中也使用它,但我无法截取屏幕截图,因为截取屏幕截图的快捷方式取消了选项 (⌥) 上下文菜单。

【问题讨论】:

  • “有没有一种方法可以让用户在按住 Option (⌥) 键时轻松地在上下文菜单中显示其他或完全不同的选项?”所以,很明显,是的,正如你的屏幕截图所证明的那样。
  • 嗨@matt,对不起,我的意思是让开发人员在 Cocoa 框架中做这样的事情的简单方法。我在 Google 上进行了快速搜索并浏览了 Apple 的上下文菜单文档,但没有找到任何东西。我不认为开发人员这样做很容易,因为 Apple 往往拥有许多不向公众提供的 API。

标签: macos cocoa contextmenu


【解决方案1】:

看看 NSView 的 menuForEvent: 方法和 NSMenuItem 的 alternate 属性。 setAlternate: 的讨论不见了,这里是:

讨论

如果接收者与前一个项目具有相同的等效键,但具有不同的等效键修饰符,则这些项目将折叠成单个可见项目,并在跟踪菜单时显示适当的项目,具体取决于哪个修饰键(如果有) 被按下。只要等效键修饰符不同,菜单项也可能没有等效键。

考虑下面的例子:menuItem1和menuItem2是同一个菜单中的菜单项,menuItem1在menuItem2之上:

[menuItem1 setTitle:@"One"];
[menuItem1 setKeyEquivalent:@"t"];

[menuItem2 setTitle:@"Two"];
[menuItem2 setKeyEquivalent:@"T"];
[menuItem2 setAlternate:YES];

显示菜单时,它只显示 menuItem1(标题为“One”)而不是两个菜单项。如果用户在显示菜单时按下 Shift 键,menuItem2(标题为“Two”)将替换“One”。

如果有两个或更多项没有等效键但修饰符不同,则访问备用项的唯一方法是使用鼠标。在以下示例中,仅当用户按下备用键时才会显示“Two”。

 [menuItem1 setKeyEquivalent:@""];
 [menuItem1 setTitle:@"One"];

 [menuItem2 setKeyEquivalent:@""];
 [menuItem2 setKeyEquivalentModifierMask:NSAlternateKeyMask];
 [menuItem2 setTitle:@"Two"];

如果您将项目标记为替代项,但它们的关键等效项不匹配,则它们可能会显示为单独的项目。将第一项标记为替代项无效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多