从另一个子视图获取子视图

时间:2012-04-17 18:51:51

标签: objective-c xcode cocoa

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

 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];

但是对于我需要做什么的任何想法都没有用?谢谢!

2 个答案:

答案 0 :(得分:2)

内容视图实际上是你的CutoutView类,所以你应该使用:

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

但两种更清洁的方式是:

1)使用IBOutlets跟踪您的观点并通过IB分配它们。 2)使用标签:

filterView.tag = 101;

然后使用:

FilterView* filterView = [[[NSApp delegate] contentView] viewWithTag:101];

答案 1 :(得分:0)

ContentView是一个窗口的方法而不是app委托,所以如果你的应用程序委托中有一个IBOutlet是“窗口”的窗口,那么你需要使用:FilterView * filter = [[[NSApp delegate] window]内容查看];