命令键向上的 Cocoa

4
我正在尝试模拟 cmd-tab 键盘快捷键的功能,用户可以按下某个键来在应用程序之间切换,当他们释放 command 键时会发生某些事情。
我现在正在使用这段代码,但它只能检测到键被按下。我需要在松开键时触发这个事件。
- (void)flagsChanged:(NSEvent *)theEvent {

if ([theEvent modifierFlags] & NSCommandKeyMask) {
    NSLog(@"Do my stuff here");
}
}

谢谢

1个回答

9
根据文档:
通知接收方用户已按下或释放修饰键(Shift、Control等)。
在此需要做的是,当您获得命令键按下的事件时,您需要在某个地方设置一个标志,并在后续调用中检查命令键是否未被按下。
例如,假设您有一个名为_cmdKeyDown的实例变量:
- (void)flagsChanged:(NSEvent *)theEvent
{
    [super flagsChanged:theEvent];

    NSUInteger f = [theEvent modifierFlags];
    BOOL isDown = !!(f & NSCommandKeyMask);
    if (isDown != _cmdKeyDown)
    {
        NSLog(@"State changed. Cmd Key is: %@", isDown ? @"Down" : @"Up");
        _cmdKeyDown = isDown;
    }
}

2
为了澄清提问者的代码为什么不起作用:[event modifierFlags] 不会返回改变了的修饰键,而是返回当前按下的修饰键。因此,如果⌘键刚刚松开,那么它就不再被按下,所以在该掩码中的位也不再设置 - 因此 [event modifierFlags] & kCommandKeyMask 的值为 0 - Peter Hosey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接