在NSMenuItem上使用keyEquivalent的奇怪行为

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

这是为什么?有任何想法吗?

Amy*_*all 5

你传了进来r还是R?我认为如果你传递一个大写字符串,它会自动添加转换要求.