无法将我的自定义NSView设置为第一响应者

时间:2017-12-08 02:47:34

标签: objective-c

我已经创建了一个简单的NSView子类,但是调用becomeFirstResponder似乎没有效果 - 框架甚至没有调用我的acceptsFirstResponder方法。

但是,如果我用鼠标点击我的视图,它似乎成为第一个响应者,我可以收到keyDown个事件。

这是我的NSView子类:

@interface MyView : NSView
@end

@implementation MyView
- (void) keyDown: (NSEvent*) with {
    NSLog(@"keyDown");
}

- (BOOL)acceptsFirstResponder {
    NSLog(@"acceptsFirstResponder");
    return YES;
}

- (BOOL)canBecomeKeyView {
    NSLog(@"canBecomeKeyView");
    return YES;
}

@end

以下是我在AppDelegate中设置的方式:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {

      NSRect frameRect = NSMakeRect(0,0,100,100);
      MyView *myView = [[MyView alloc] initWithFrame:frameRect];
      [_window.contentView addSubview:myView];

      [myView becomeFirstResponder];
}

我做错了什么?

1 个答案:

答案 0 :(得分:1)

哎呀 - the documentation说'永远不要直接调用此方法'。所以我应该打电话给

[_window makeFirstResponder:myView];

而不是

[myView becomeFirstResponder];

感谢Willeke的提示。