在Cocoa应用程序中,有没有办法轻松允许用户在按住Option(⌥)键时在上下文菜单中显示其他或完全不同的选项?
此处正在全局菜单栏的“卷”上下文菜单中使用:
它也在Finder中使用,但我无法截取屏幕截图,因为截屏的快捷方式取消了Option(⌥)上下文菜单。
答案 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"];
如果您将项目标记为替代项但其等效项不匹配,则它们可能会显示为单独的项目。将第一个项目标记为替代项无效。