2012-03-18 53 views
4

任何人都可以告訴我在另一個.xib(nib)上顯示.xib(nib)的方式(或直接指向信息)。Cocoa - 在另一個xib上顯示xib

我怎麼也只希望把它,所以我可以programically移動它圍繞主筆尖類的這樣的(這顯然是行不通的)

- (void)drawRect:(NSRect)dirtyRect 
{ 

    NSRect customView = NSMakeRect(pos1, pos1, 200, 100); 

    [[NSBundle mainBundle] loadNibNamed:@"secondXib" owner:self]; 

    NSRectFill (customView); 
} 

我希望爲Mac OS X這樣做(不是iPhone)。 (順便說一下,使用xCode 4 incase會產生變化)

回答

9

您可以使用NSViewController輕鬆地從另一個筆尖加載視圖。在您的筆尖上,您應該將文件的所有者的自定義類別設置爲NSViewController,然後連接 文件的所有者以指向要加載的視圖。你可以這樣做:

//create an NSViewController and use it to load the nib 
NSViewController* vc = [[NSViewController alloc] initWithNibName:@"YourNibName" bundle:nil]; 
//get the view from the view controller 
NSView* loadedView = [vc view]; 
//release the view controller so we don't leak 
[vc release]; 
//add the view as a subview of your main view 
[mainView addSubview:loadedView]; 
//position the view 
[loadedView setFrameOrigin:NSMakePoint(100.0, 100.0)]; 

你不需要做任何事情在drawRect:。子視圖將自行繪製,如果移動子視圖,則將自動調用drawRect:。您應該閱讀View Programming Guide for Cocoa。理解觀點如何工作是至關重要的,從你的問題中可以清楚地看出你還沒有這種理解。您也應該閱讀Cocoa Drawing Guide

+0

如何從'YourNibName'連接到代碼進入的控制器? (澄清,而不是'NSViewController * vc',但包含所有代碼的控制器類) – Alexander 2014-07-18 02:01:58

+1

你不能,也不應該。視圖控制器應該管理所有這些,它應該通過委託方法或其他方法與其擁有的對象進行通信。 – 2014-07-18 04:49:56

1

非常感謝, 另一種替代方案(基本上是非編程方法)是在第一個xib中添加一個NSViewController對象,並將其設置爲使用您指定的nib名稱。 在你的第二個xib中,不要忘記在視圖的「自定義類」字段(和文件所有者的NSViewController)中設置類名,否則不起作用。