在Objective-C中检测双键按键

时间:2012-01-15 23:34:32

标签: objective-c cocoa

我正在尝试检测用户是否快速按键盘键两次,双击。按下键是一个NSEvent,并被这种方法捕获:

- (void)sendEvent:(NSEvent *)theEvent
{
    NSString* keysPressed = [theEvent characters];
    if ( [keysPressed isEqualToString:@" "] )
    {
        if(theEvent.type==NSKeyDown)
            NSLog(@"spaceDown");
        if(theEvent.type==NSKeyUp)
            NSLog(@"spaceUp");
    }
}

日志语句确实在按下并释放空格键时出现,但现在我想检测用户是否双击空格键,并将其与两次单独按下区分开来。我想我们必须为此创建一个自定义解决方案。

如何检测两个空格键按键事件是否相隔0.3秒(从而使其成为双按),然后在满足该条件时执行某个操作?

1 个答案:

答案 0 :(得分:1)

至少有两种可能的解决方案。

  1. 存储当前系统时间,然后与上次存储的时间进行比较。
  2. 设置BOOL doubleKeypress = YES,然后点燃NSTimer点火延迟0.3以设置doubleKeypress = NO
  3. 在这两种情况下,您都需要确保只检查以前按该键的内容,因此可以将BOOL s或时间与关联的keyCode一起存储来自NSEvent

    由于您只能检测到双按键,因此您只需要跟踪1个先前的按键,因此您可以随时覆盖现有的“上一个事件”。如果你开了一个双键按钮,请务必将其设置为nil(否则你将在3个按键中触发2个双键事件等)!