2011-02-09 98 views
0

我無法在NSView的子類中接收鍵盤事件。鍵盤事件目標C

我可以很好地處理鼠標事件,但是我的keyDown和keyUp方法從不會被調用。根據文件,我的理解是,兩種事件都遵循相同的層次結構,但這看起來並非如此。

這是第一個響應者的問題?某個領域抓住了焦點?我試過壓倒但沒有運氣。

任何見解將不勝感激。

如果你想看到的..這是一個自定義的NSView類中:

#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

僅供參考,您的` mouseDown:`方法正在泄漏內存。 – 2011-02-09 00:55:23

回答

2

你必須設置你的NSView是第一個響應者

- (BOOL)acceptsFirstResponder { return YES; }

+0

會發誓我不僅試過,但實際上仍然在那裏。 – 2011-02-09 00:50:05