2012-01-15 57 views
0

我搜索了整个互联网上的东西没有运气。我试图检测用户是否在Mac应用上点击空格键。在Mac上检测空格键事件?

-(void)keyDown:(NSEvent*)theEvent;当用户按下字符键,但没有输入或空格时效果很好。

-(BOOL)performKeyEquivalent:(NSEvent *)theEvent;当用户点击回车键或方向键而不是空格键时被调用。

任何想法?

回答

0

能得到它的工作通过继承NSWindow和实施此方法:

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

虽然这个解决方案引起了很多其他问题,因此,如果任何人都知道另一种方式,请分享。 – Snowman 2012-01-16 17:02:14

+0

你有什么发现? – 2012-12-14 18:27:03

0

您可以根据空格键常量使用其他循环与键号码32。

if ([theArrow length] == 1) 
    { 
     keyChar = [theArrow characterAtIndex:0]; 
     NSLog(@"Dentro2 %hu", keyChar); 
     switch (keyChar) 
     { 
      case 32: // Space Bar management 

       break;    
     } 
    } 

    // Manage when any key is dropped. 
    if(downOrUp == FALSE) 
    { 
     NSLog(@"Tecla soltada."); 
     self.playerVelocity = CGPointMake(0.0, 0.0); 
    } 

// Methods to handle key push and key drop 
    - (void)keyDown:(NSEvent *)event 
    { 
     [self handleKeyEvent:event keyDown:YES]; 
    } 

    - (void)keyUp:(NSEvent *)event 
    { 
     [self handleKeyEvent:event keyDown:NO]; 
    } 
+0

如果你#include '那么你可以使用'kVK_Space'而不是'32'。 – pkamb 2015-06-14 21:20:06

0

我不由自主地绊了一下。奇怪的是,keyDown:事件仅通过moby所述的方法检测到。但是keyUp:作品像空格键按下一个魅力

0

尝试几个解决方案后,我带着一个din't打破其他东西对我来说

@import Carbon; 

typedef void (^CustomWindowSpacebarKeyCallback)(NSEventType eventType); 

@interface CustomWindow : NSWindow 

@property (nonatomic, copy) CustomWindowSpacebarKeyCallback spacebarKeyCallback; 

@end 

@implementation CustomWindow 

- (void) sendEvent:(NSEvent *)theEvent 
{ 
    [super sendEvent:theEvent]; 

    if (([theEvent type] == NSKeyDown || [theEvent type] == NSKeyUp) && _spacebarKeyCallback) { 
     NSString *keysPressed = [theEvent characters]; 
     if ([keysPressed length] == 1) { 
      unichar keyChar = [keysPressed characterAtIndex:0]; 
      if (keyChar == kSpaceCharCode) { 
       _spacebarKeyCallback([theEvent type]); 
      } 
     } 
    } 
} 

@end