Command-Key-Up Cocoa

cen*_*ree 4 cocoa objective-c

我正在尝试模仿cmd-tab键盘快捷键的功能,用户可以在应用程序之间切换某个键,然后当它们释放命令时会发生某些事情.

我现在正在使用此代码,但它只能检测keydown.我需要这个才能解决问题

- (void)flagsChanged:(NSEvent *)theEvent {

if ([theEvent modifierFlags] & NSCommandKeyMask) {
    NSLog(@"Do my stuff here");
}
}
Run Code Online (Sandbox Code Playgroud)

谢谢

ipm*_*mcc 9

根据文件:

通知接收器用户已按下或释放修改键(Shift,Control等).

你需要做的是当你得到命令键关闭的事件时,你需要在某个地方设置一个标志,并在随后的调用中检查命令键是否缺失.

例如,假设您有一个名为的ivar _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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 为了澄清提问者的代码不起作用的原因:`[event modifierFlags]`不返回*更改*的修饰符; 它返回现在为*的修饰符*.所以,如果⌘键刚刚上升,那么它就不再下降了,所以它的掩码中的位不再被设置 - 所以`[event modifierFlags]&kCommandKeyMask`是'0`. (2认同)