Dr.*_*eon 2 cocoa keyboard-shortcuts objective-c nsmenuitem
我希望能够设置keyEquivalent一个NSMenuItem基于a NSString,例如:CMD+ R,ALT+ SHIFT+ D等
为此,我在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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我正在测试使用CMD+ R.
NSLog输出是:
2012-04-03 10:36:19.051 App [4654:903]部分:( CMD,R)
2012-04-03 10:36:19.052 App [4654:903] cmd
2012-04-03 10:36:19.052 App [4654:903] keyEq:{key = R; mask = 1048576; } - 用于运行
哪个好看; mask=1048576意思1<<20是等于NSCommandKeyMask.
换句话说,它就像正确解释了Key Equivalent(Command- R)一样.
但奇怪的是,当菜单项最终出现时,旁边出现的Key Equivalent是" Command- SHIFT- R"......: - S
这是为什么?有任何想法吗?
| 归档时间: |
|
| 查看次数: |
1438 次 |
| 最近记录: |