2011-02-09 71 views
0

我從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 ]; 

任何人有一個想法?

回答

0

我找到了解決方案。 NSBox是ContentView的子視圖。所以下面的工作:

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