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