i want to set the key equivalent of a menuitem with [menuitem setKeyEquivalent:(NSString *)s], how can i do that if i have multiple modifiers ?
i tried:
unichar shift = NSShiftKeyMask, cmd = NSCommandKeyMask;
NSMutableString *keyequiv = [[NSMutableString alloc] init];
[keyequiv appendString:[NSString stringWithCharacter:&shift, 1]];
[keyequiv appendString:[NSString stringWithCharacter:&cmd, 1]];
[keyequiv appendString:@"x"];
[menuItem setKeyEquivalent:keyequivalent];
but that doesnt work.
The modifier key masks are just that: masks, not characters. You can't insert them into the key equivalent string. To apply them, use setKeyEquivalentModifierMask:
[menuItem setKeyEquivalentModifierMask: NSShiftKeyMask | NSCommandKeyMask];
[menuItem setKeyEquivalent:@"x"];
As with any other mask, use the bitwise OR operator |
to form combinations. See "Setting a Menu Item's Key Equivalent" for more details.
The setKeyEquivalent:
method is used to specify the character which triggers the command, but not the modifiers. It will set default modifiers by examining the character you pass. If you pass a lowercase character, it will use just command. If you pass an uppercase character, it will use shift+command. Because of this, you simply need to do this for shift+command+x:
[menuItem setKeyEquivalent:@"X"];
If you want to use other modifiers, you then call setKeyEquivalentModifierMask:
with the proper constants, chosen from NSShiftKeyMask
, NSAlternateKeyMask
(option), NSCommandKeyMask
, and NSControlKeyMask
.
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