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

时间:2011-02-09 22:46:19

标签: macos operating-system nsdocument osx-leopard

我开始使用Hillegass的书“Cocoa Programming for MAC OS X”中的View Swapping代码。此代码使用MyDocument.nib中的弹出菜单,使用MyDocument.m中的displayViewController交换ViewControllers,如下所示。我正在尝试使用ViewController中的表行来通过调用生成表的ViewController中的MyDocument.m中的displayViewController来交换ViewControllers:

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

我遇到的问题是当我从另一个ViewController调用displayViewController时,我需要沿着MyDocument.nib中的Interface Builder实例化NSBox,以便可以在MyDocument.m中的NSBox内部交换视图。这样做我需要能够从另一个ViewController访问MyDocument.nib中的Interface Builder实例化NSBox。

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

编辑:

我取得了一些进展。视图层次结构为:

 Window
   ContentView
     NSBox

我已经能够通过以下方式获得顶级窗口和当前的ContentView:

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

但我仍然没有弄清楚如何获取ContentView中的NSBox。我尝试了以下但是他们没有工作:

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

有人有想法吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。 NSBox是ContentView的子视图。以下是有效的:

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