4

我知道如何在 iOS 中做到这一点,但不知道如何在 Cocoa 中做到这一点。

我想捕获键盘事件,我想我需要重写acceptsFirstResponder 方法来完成它(keyDown 方法被触发)。所以我创建了一个扩展 NSCustomView 的类,并试图将它添加到主窗口中,但我就是不明白该怎么做。到目前为止,我向主视图添加了一个自定义视图,然后尝试以编程方式添加它,例如:

TestView *view = [[TestView alloc] init];
[[_window contentView] addSubview:view];

但这不起作用。那么我该怎么做呢?

4

1 回答 1

4

要查看视图是否已添加到窗口,您可以覆盖视图的viewDidMoveToWindow方法并记录[self window]要检查的值(如果是,nil则视图已从窗口中删除):

- (void)viewDidMoveToWindow
{
    NSLog(@"window=%p", [self window]);
    [super viewDidMoveToWindow];
}

你应该是子类化NSView,不是NSCustomView,并且initWithFrame是指定的初始化器NSView,不是init

尝试:

TestView *view = [[TestView alloc] initWithFrame:NSMakeRect(0, 0, 100, 200)];
[[_window contentView] addSubview:view];
于 2012-06-27T12:42:23.377 回答