Какао: настройка ключевого эквивалента - PullRequest
14 голосов
/ 03 июня 2011

Я хочу установить ключевой эквивалент элемента меню с помощью [menuitem setKeyEquivalent: (NSString *) s], Как я могу это сделать, если у меня есть несколько модификаторов?

я пробовал:

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];

но это не работает.

Ответы [ 4 ]

24 голосов
/ 03 июня 2011

Маски клавиш-модификаторов - это только маски, а не символы.Вы не можете вставить их в строку, эквивалентную ключу.Чтобы применить их, используйте setKeyEquivalentModifierMask:

[menuItem setKeyEquivalentModifierMask: NSShiftKeyMask | NSCommandKeyMask];
[menuItem setKeyEquivalent:@"x"];

Как и с любой другой маской, используйте побитовый оператор ИЛИ | для формирования комбинаций.Подробнее см. «Настройка эквивалентного пункта меню» .

11 голосов
/ 03 июня 2011

Метод setKeyEquivalent: используется для указания символа, запускающего команду, но не модификаторов.Он установит модификаторы по умолчанию, изучив передаваемый вами символ.Если вы передадите строчный символ, он будет использовать только команду .Если вы передадите заглавный символ, он будет использовать shift + command .Из-за этого вам просто нужно сделать это для shift + command + x :

[menuItem setKeyEquivalent:@"X"];

Если вы хотите использовать другиемодификаторы, затем вы вызываете setKeyEquivalentModifierMask: с правильными константами, выбранными из NSShiftKeyMask, NSAlternateKeyMask (опция), NSCommandKeyMask и NSControlKeyMask.

4 голосов
/ 30 июля 2015

Пример для Swift 2.0:

let key = String(utf16CodeUnits: [unichar(NSBackspaceCharacter)], count: 1) as String
item.keyEquivalentModifierMask = Int(NSEventModifierFlags.CommandKeyMask.rawValue | NSEventModifierFlags.ControlKeyMask.rawValue)
item.keyEquivalent = key
2 голосов
/ 08 марта 2017

Пример для Swift 3.0:

item.keyEquivalent = "x"
item.keyEquivalentModifierMask = [NSAlternateKeyMask, NSCommandKeyMask]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...