Cocoa中的选项(⌥)+上下文菜单?

时间:2015-11-17 18:43:12

标签: macos cocoa contextmenu

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

此处正在全局菜单栏的“卷”上下文菜单中使用:
Here is an image of the Volume context menu in the global Menu bar
Here is an image of the Volume context menu if I hold Option (⌥) before toggling it

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

1 个答案:

答案 0 :(得分:2)

查看NSView的menuForEvent:方法和NSMenuItem的alternate属性。 缺少对setAlternate的讨论:这里是:

  

讨论

     

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

     

考虑以下示例:menuItem1和menuItem2是同一菜单中的菜单项,menuItem2位于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"];
  

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