NSMenuItem
のkeyEquivalent
をNSString
に基づいて設定できるようにしたいと考えました。 :CMD + R、ALT + SHIFT + D、このためなどNSMenuItemでkeyEquivalentを使用する奇妙な動作
は、私は、次のようにNSString
カテゴリ方法を作成した(デバッグNSLog
Sが含まれる):
- (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 + を使用してテストしています。
のNSLog出力は次のとおり
2012-04-03 10:36:19.051アプリ[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; マスク= 1048576; } - 実行の場合
mask=1048576
は1<<20
を意味し、これはNSCommandKeyMask
に等しい。言い換えれば
、それがキーと同等かのように思える(コマンド - R)正しく解釈されてきました。
奇妙なことは、しかし、メニュー項目が最終的に表示されたときに、キーと同等の次はあるように見えるということです.... " - - SHIFTコマンドR":-S
なぜですか?何か案は?
聖なる牛を...どうもありがとう!私の信じられないほどばかげた;そのような効果があったかもしれないと想像することもできませんでした...あなたは私をずっと救ってくれました! :-) –