【问题标题】:Keyboard Events Objective C键盘事件目标 C
【发布时间】:2017-09-16 00:49:34
【问题描述】:

我无法在 NSView 的子类中接收键盘事件。

我可以很好地处理鼠标事件,但是我的 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"];
    }
}

【问题讨论】:

  • 仅供参考,您的 mouseDown: 方法正在泄漏内存。

标签: objective-c cocoa mouseevent


【解决方案1】:

您必须将您的 NSView 设置为第一响应者

- (BOOL)acceptsFirstResponder { return YES; }

【讨论】:

  • 我会发誓我不仅尝试过,而且实际上还有那个。
猜你喜欢
  • 2022-01-22
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 2016-09-10
  • 2011-10-25
  • 2011-01-05
相关资源
最近更新 更多