0

我的主窗口的内容视图设置如下:

 newContentView = [[CutoutView alloc]initWithFrame:window.frame];
     [window setContentView:newContentView];
     [newContentView release];

其中 CutoutView 是我的子类的名称。现在我想给它添加一个子视图,所以我做了以下,

filterView = [[FilterView alloc]initWithFrame:NSMakeRect(100, 100, 500, 500)]; 
    [newContentView addSubview:filterView];
    [filterView release];

一切正常,除了现在我想从我的 filterView 子类中调用方法,我想像这样得到它,但它不会工作。

FilterView *filter = [[NSApp delegate] contentView]; 

我在文档中读到,通过使用 contentView 它只“返回窗口层次结构中最高可访问的 NSView 对象”所以我尝试将以下内容添加到 addSubview

[newContentView addSubview:filterView positioned:NSWindowAbove relativeTo:nil];

但这对我需要做什么没有任何想法?谢谢!

4

2 回答 2

2

The content view is really your CutoutView class so you should be using:

FilterView *filterView = [[[[[NSApp delegate] window] contentView] subviews] objectAtIndex:0];

But two cleaner ways are:

1) Use IBOutlets to keep track of your views and assign them via IB. 2) Use tags:

filterView.tag = 101;

then use:

FilterView* filterView = [[[NSApp delegate] contentView] viewWithTag:101];
于 2012-04-17T19:48:22.443 回答
0

ContentView 是您的窗口而不是应用程序委托的方法,因此如果您的应用程序委托中有一个 IBOutlet 为“窗口”的窗口,那么您需要使用:FilterView *filter = [[[NSApp delegate] window] contentView];

于 2012-04-17T19:30:41.453 回答