Я хотел был бы установить keyEquivalent
NSMenuItem
на основе NSString
, например. : ЦМД + R, ALT + SHIFT + D и т.д.Странное поведение с использованием keyEquivalent на NSMenuItem
Для этого я создал метод в NSString
категории следующим образом (отладки NSLog
с включены):
- (NSDictionary*)toKeyEquivalent
{
NSMutableDictionary* result = [NSMutableDictionary dictionary];
NSArray* parts = [self componentsSeparatedByString:@"+"];
NSLog(@"parts :%@",parts);
if ([[parts objectAtIndex:0] isEqualToString:@""])
{
return [NSDictionary dictionaryWithObjectsAndKeys:@"",@"key",[NSNumber numberWithInt:0],@"mask", nil];
}
else
{
[result setValue:[parts lastObject] forKey:@"key"];
int mask = 0;
for (NSString* p in parts)
{
if ([p isEqualToString:@"CMD"])
{
NSLog(@"cmd");
mask |= NSCommandKeyMask;
}
else if ([p isEqualToString:@"SHIFT"])
{
NSLog(@"shift");
mask |= NSShiftKeyMask;
}
else if ([p isEqualToString:@"CTRL"])
{
NSLog(@"ctrl");
mask |= NSControlKeyMask;
}
else if ([p isEqualToString:@"ALT"])
{
NSLog(@"alt");
mask = NSAlternateKeyMask;
}
}
[result setValue:[NSNumber numberWithInt:mask] forKey:@"mask"];
return result;
}
}
Теперь, я тестирую, используя CMD + R.
Выход NSLog является:
2012-04-03 10: 36: 19,051 App [4654: 903] части :( CMD, R)
2012-04-03 10 : 36: 19.052 Приложение [4654: 903] cmd
2012-04-03 10: 36: 19.052 Приложение [4654: 903] keyEq: { ключ = R; mask = 1048576; } - для пробега
Какой выглядит хорошо; mask=1048576
означает 1<<20
, что равно NSCommandKeyMask
.
Другими словами, КАЖЕТСЯ, как если ключ эквивалент (Command - R) правильно интерпретированы.
Странная вещь, однако, является то, что, когда, наконец, появится пункт меню, ключ Эквивалент появляясь рядом с является «Command - SHIFT - R» ....: -S
Почему? Есть идеи?
Святая корова ... Большое спасибо! Невероятно глупо меня; просто не мог даже представить, что что-то подобное могло иметь такой эффект ... Ты спас меня так много времени! :-) –