2012-04-14 38 views
0

我在我的AppDelegate中创建了一个窗口,然后当我使用newContentView执行任何操作时,将内容视图设置为NSView子类“CutoutView”,例如从CutoutView获取方法,他们工作得很好。来自不同类的方法两次

// Configure contentView in AppDelegate 
    newContentView = [[CutoutView alloc]initWithFrame:window.frame]; 
    [window setContentView:newContentView]; 

现在我有另一个名为MoveFilter的NSView子类,我希望能够从我的CutoutView中调用方法。问题是为了做到这一点,我必须再次分配和初始化CutoutView方法,并且在执行方法时可以调用,但没有显示任何内容,因为CutoutView之前已经是alloc和init。

// in MoveFilter 
cutOutView = [[CutoutView alloc]init]; 
[cutOutView someMethod]; 

什么我需要添加到MoveFilter或我能看着帮我能够调用方法,他们将显示就像newContentView呢?对不起,我是新手,谢谢!

回答

2

获取现有的从应用程序的委托CutoutView:(假设你有这样的属性 - 它看起来像你把它变成伊娃)

CutoutView * cv = [[NSApp delegate] newContentView]; 

或窗口:

// in MoveFilter 
CutoutView * cv = [[self window] contentView]; 

(假设MoveFilterCutoutView是在同一窗口)

或者,如果这两个假设都不正确,则可以合并这两个过程并获取应用程序委托的窗口的内容视图。我会把它作为你的练习。

+0

我为newContentView创建了一个属性,我用你的第一个例子'CutoutView * cv = [[NSApp delegate] newContentView];'它们在单独的窗口中,所以在我的下一行中,我尝试着像'cv = [[self window] contentView];'但是我得到一个错误,我关闭了吗? – 2012-04-14 18:21:59

+1

'[[[NSApp委托]窗口] contentView]' – 2012-04-14 18:46:34

+0

所以这样? 'CutoutView * cv = [[NSApp delegate] newContentview];''''和'cv = [[[NSApp委托]窗口] contentView];'它错误地给出错误,但我无法调用某个方法'[cv someMethod]'谢谢为了保持耐心 – 2012-04-14 18:55:55