由于该NSMenuDelegate
方法menuNeedsUpdate:
是在显示之前调用的,因此可以覆盖它,检查是否[NSEvent modifierFlags]
设置了备用位,并使用它来显示/隐藏您的秘密菜单项。
这是一个示例,从Reveal Functionality with Key Modifiers复制而来,它完全涵盖了这个主题:
#pragma NSMenu delegate methods
- (void) menuNeedsUpdate: (NSMenu *)menu
{
NSLog(@"menuNeedsUpdate: %@", menu);
NSUInteger flags = ([NSEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask);
// We negate the value below because, if flags == NSAlternateKeyMask is TRUE, that
// means the user has the Option key held, and wants to see the secret menu, so we
// need shoudHideSecretMenu to be FALSE, so we just negate the value.
BOOL shoudHideSecretMenu = !(flags == NSAlternateKeyMask);
NSLog(@"Flags: 0x%lx (0x%x), shoudHideSecretMenu = %d", flags, NSAlternateKeyMask, shoudHideSecretMenu);
[secretMenuItem setHidden:shoudHideSecretMenu];
}