Cocoa - 在另一个xib上显示xib

问题描述:

任何人都可以告诉我在另一个.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会产生变化)

您可以使用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

非常感谢, 另一种替代方案(基本上是非编程方法)是在第一个xib中添加一个NSViewController对象,并将其设置为使用您指定的nib名称。 在你的第二个xib中,不要忘记在视图的“自定义类”字段(和文件所有者的NSViewController)中设置类名,否则不起作用。