gpt4 book ai didi

objective-c - 在 NSMenuItem 上使用 keyEquivalent 的奇怪行为

转载 作者:行者123 更新时间:2023-12-03 16:24:48 26 4
gpt4 key购买 nike

我希望能够设置 keyEquivalentNSMenuItem基于NSString ,例如:CMD+RALT+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;
}
}

现在,我正在使用 CMD+R 进行测试。

NSLog 输出是:

2012-04-03 10:36:19.051 App[4654:903] parts :( 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; } - for Run

看起来不错; mask=1048576意味着 1<<20等于 NSCommandKeyMask .

换句话说,似乎等效键(Command-R)已被正确解释。

奇怪的是,当菜单项最终出现时,旁边出现的等效键是“Command-SHIFT- R“....:-S

这是为什么呢?有什么想法吗?

最佳答案

你传入的是r还是R?我认为如果你向它传递一个大写字符串,它会自动添加类次要求。

关于objective-c - 在 NSMenuItem 上使用 keyEquivalent 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9989146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com