我从 Hillegass 的书 Cocoa Programming for MAC OS X 中的视图交换代码开始。该代码使用 MyDocument.nib 中的弹出菜单来使用 MyDocument.m 中的 displayViewController 交换 ViewControllers,部分如下所示。我正在尝试通过从生成表的 ViewController 调用 MyDocument.m 中的 displayViewController 来使用 ViewController 中的表行来交换 ViewController:
- (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
我已经能够使用以下内容获得顶级 Window 和当前 ContentView:
NSWindow *w = self.view.window;
NSView *v = [w contentView];
但我仍然没有弄清楚如何获取 ContentView 中的 NSBox。我尝试了以下方法,但没有奏效:
NSBox *b = [v container];
NSBox *b = [v content ];
有人有想法吗?