2011-02-09 3 views
0

J'ai des problèmes pour recevoir des événements de clavier dans une sous-classe de NSView.Evénements clavier Objectif C

Je peux gérer correctement les événements de souris, mais mes méthodes keyDown et keyUp ne sont jamais appelées. J'ai cru comprendre dans la documentation que les deux types d'événements suivent la même hiérarchie, mais ce n'est apparemment pas le cas.

Est-ce un problème de premier intervenant? Un champ quelque part saisissant l'accent? J'ai essayé de passer outre, mais pas de chance.

Toute idée serait grandement appréciée.

Si vous souhaitez voir .. c'est dans une classe NSView personnalisée:

#pragma mark - 
#pragma mark I/O Events 
-(void)keyDown:(NSEvent *)theEvent { 
    NSLog(@"Sup brah!"); 
} 

-(void)keyUp:(NSEvent *)theEvent { 
    NSLog(@"HERE"); 
} 

// This function works great: 
-(void)mouseDown:(NSEvent *)theEvent { 
    NSNumber *yeah = [[NSNumber alloc] initWithBool:YES]; 
    NSNumber *nah = [[NSNumber alloc] initWithBool:NO]; 
    NSString *asf = [[NSString alloc] initWithFormat:@"%@", [qcView valueForOutputKey:@"Food_Out"]]; 

    if ([asf isEqualToString:@"1"]) { 
     [qcView setValue:nah forInputKey:@"Food_In"]; 
     best_food_x_loc = convertToQCX([[qcView valueForOutputKey:@"Food_1_X"] floatValue]); 
     best_food_y_loc = convertToQCY([[qcView valueForOutputKey:@"Food_1_Y"] floatValue]); 
     NSLog(@"X:%f, Y:%f",best_food_x_loc, best_food_y_loc); 
    } else { 
     [qcView setValue:yeah forInputKey:@"Food_In"]; 
    } 
} 
+0

Pour votre information, votre ' mouseDown: 'la méthode fuit la mémoire. –

Répondre

2

Vous devez définir votre NSView pour être le premier répondeur

- (BOOL)acceptsFirstResponder { return YES; }

+0

J'aurais juré non seulement que j'essayais cela, mais que je l'avais encore fait. –