如何将自定义NSView添加到Window

时间:2012-06-27 11:25:55

标签: macos cocoa nsview

我知道如何在iOS中执行此操作,但无法在Cocoa中找到它。

我想捕获键盘事件,我想我需要覆盖acceptFirstResponder方法来实现它(触发keyDown方法)。所以我创建了一个扩展NSCustomView的类,并试图在主窗口中添加它,但我无法理解如何做到这一点。到目前为止,我向主视图添加了自定义视图,然后尝试以编程方式添加它:

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

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

1 个答案:

答案 0 :(得分:4)

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

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

您应该是NSView的子类,而不是NSCustomView,而initWithFrameNSView的指定初始值设定项,而不是init

尝试:

TestView *view = [[TestView alloc] initWithFrame:NSMakeRect(0, 0, 100, 200)];
[[_window contentView] addSubview:view];