I have an NSMenu
that contains NSMenuItems
with custom views. I want it so that when the alt button is pressed, the menu items would change part of their look (through their view). I found setAlternative
in the NSMenuItem
docs, however, in practice I could only get it to work with NSMenuItems
without custom views. As soon as I set a custom view, all of the menu items would be displayed.
Also, I tried getting keypress events while the menu was open. Due to the other run loop, NSApplication's sendEvent:
doesn't receive events until after the menu is closed. Therefore, I can't just intercept the event coming in.
Does anyone know how I can get notified, whether through delegation or subclassing, of when the alt key is pressed when a menu is opened?
You should set an object as the delegate of your menu and then implement the delegate method -menu:updateItem:atIndex:shouldCancel:
.
This will allow you to change the state of your custom view before the menu item is displayed, based on the current modifier state.
You can get the current modifiers by asking for [[NSApp currentEvent] modifierFlags]
.
If you need to be notified if the modifier flags change while your menu is open, implement the -flagsChanged:
method in your custom view:
- (void)flagsChanged:(NSEvent*)event
{
if ([event modifierFlags] & NSAlternateKeyMask) // check for option key
{
//do something
}
else
{
//do something else
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With