Objective-C如何检测按键?为何keyDown事件中switch分支失效?
解决keyDown中switch分支不触发的问题
看起来你已经能正常捕获按键事件(第一个NSLog能输出keyCode),但switch里的case 0x0D没触发,大概率是这两个原因:
- 你按下的键对应的真实keyCode并不是0x0D:macOS里主键盘的Return键编码是0x0D,但小键盘的Enter键编码是0x4C,如果你按的是小键盘的Enter,自然不会匹配到0x0D的分支。
- 虽然单个case下
break不是必须的,但养成添加break的习惯,能避免后续扩展分支时出现逻辑混乱。
给你调整后的代码,同时输出十进制和十六进制的keyCode,方便你精准核对按键对应的真实编码:
- (void)keyDown:(NSEvent *)event { UInt16 keyCode = event.keyCode; // 同时输出十进制和十六进制,清晰看到按键的真实编码 NSLog(@"Pressed key code: %hu (0x%02X)", keyCode, keyCode); switch (keyCode) { case 0x0D: // 主键盘Return键 NSLog(@"Main Return pressed"); break; case 0x4C: // 小键盘Enter键 NSLog(@"Numpad Enter pressed"); break; default: // 其他按键的默认处理,可选保留 NSLog(@"Other key pressed"); break; } }
你只需要按下目标按键,看控制台输出的十六进制值,把case改成对应的数值即可。比如如果输出是0x4C,就把case改成0x4C,这样就能正确触发对应的日志了。
内容的提问来源于stack exchange,提问作者lbwnb123
相关产品推荐
相关产品推荐

