访问IB在另一个类的MyDocument中实例化NSBox?

问题描述:

我从Hillegass的书Cocoa Programming for MAC OS X的视图交换代码开始。此代码使用MyDocument.nib中的弹出式菜单在MyDocument.m中使用displayViewController交换ViewControllers,部分显示如下。我想,而不是使用一个表的行中的ViewController通过从视图控制器MyDocument.m调用displayViewController生成表交换ViewControllers:访问IB在另一个类的MyDocument中实例化NSBox?

- (void)displayViewController:(ManagingViewController *)vc 
        curBox: (NSBox *)windowBox 
{ 
// End editing 
NSWindow *w = [windowBox window]; 
BOOL ended = [w makeFirstResponder:w]; 
if (!ended) { 
    NSBeep(); 
    return; 
} 
... 

我遇到的问题是,当我打电话displayViewController从我需要沿Interface Builder发送的另一个ViewController在MyDocument.nib中实例化NSBox,以便可以在MyDocument.m中的NSBox内交换视图。所以对此我需要能够从另一个ViewController访问Interface Builder在MyDocument.nib中实例化NSBox。

有谁知道如何从另一个ViewController访问Interface Builder在MyDocument.nib中实例化NSBox?

编辑:

我已经取得了一些进展。视图层次是:

Window 
    ContentView 
    NSBox 

我已经能够到达*窗口和当前内容查看下列要求:

NSWindow *w = self.view.window; 
NSView *v = [w contentView]; 

,但我还没有想出如何获得在ContentView内的NSBox。我试过以下,但他们没有工作:

NSBox *b = [v container]; 
NSBox *b = [v content ]; 

任何人有一个想法?

我找到了解决方案。 NSBox是ContentView的子视图。所以下面的工作:

NSWindow *w = self.view.window; 
NSArray *va = [[w contentView] subviews]; 
NSBox *b = [va objectAtIndex:0];