Обнаружить событие пробела на Mac? - PullRequest
0 голосов
/ 16 января 2012

Я искал что-то по всему интернету, но не повезло. Я пытаюсь определить, нажимает ли пользователь пробел в приложении Mac.

-(void)keyDown:(NSEvent*)theEvent; отлично работает, когда пользователь нажимает на символьную клавишу, но не вводит или пробел.

-(BOOL)performKeyEquivalent:(NSEvent *)theEvent; вызывается, когда пользователь нажимает клавишу ввода или клавиши со стрелками, но не пробел.

Есть идеи?

Ответы [ 4 ]

0 голосов
/ 21 марта 2017

Попробовав несколько решений, я пришел с одним, который не сломал бы другие вещи для меня

@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
0 голосов
/ 31 декабря 2013

Вы можете использовать этот другой цикл с номером ключа 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 голосов
/ 15 июня 2015

Я случайно наткнулся на это.Как ни странно, событие keyDown: обнаруживается только методом, описанным moby .Но keyUp: работает как брелок с клавишей пробела

0 голосов
/ 16 января 2012

удалось заставить его работать, создав подкласс NSWindow и реализовав этот метод:

- (void)sendEvent:(NSEvent *)theEvent
{
    NSString* keysPressed = [theEvent characters];
    if ( [keysPressed isEqualToString:@" "] )
    {
        if(theEvent.type==NSKeyDown)
            NSLog(@"spaceDown");
        if(theEvent.type==NSKeyUp)
            NSLog(@"spaceUp");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...