带有许多xib的UIViewController
问题描述:
我正在开发一个iOS应用程序。我有一个控制器:iPhonePopUpController,在这个控制器我有这样的图像的厦门国际银行:带有许多xib的UIViewController
我的问题是,我可以在其他XIB添加到该控制器并加载它,当我需要它,或者我应该创建第二个控制器加载我的第二个xib?
答
您使用可以加载一个XIB什么:
[[NSBundle mainBundle] loadNibNamed:@"YourOtherXIB.xib" owner:someObjectThatWillTakeThePlaceOfFilesOwner options:0]
此行取消存档XIB创建你在你的XIB有对象的实例名为YourOtherXIB.xib
,然后连接所有网点和你的行动在XIB中定义,并返回*对象列表。
当你创建一个厦门国际银行,其文件的所有者是UIViewController
,通常你再使用如下代码初始化UIViewController
:
UIViewController* vc = [[[UIViewController alloc] initWithNibName:nibName bundle:bundle] autorelease];
这段代码基本上做到内部是它存储的nibName
和bundle
您在某些内部属性中提供,并且在需要加载其视图时(尤其是第一次需要将其显示在屏幕上时),它会使用类似上面引用的行的方式从XIB加载视图:
[bundle loadNibNamed:nibName owner:self options:0];
当你连接到view
IBOutlet中的File's Owner
的认为在你的厦门国际银行(在这种情况下是作为一个参数,即UIViewController
本身传递的self
),那么你的UIViewController
将是view
财产填充了刚刚从XIB中取消存档的视图。这就是UIViewController
从XIB文件加载其视图的方式。
但是当然你也可以为你自己的班级做同样的事情,并且不需要你的档案所有者成为UIViewController
。简单地让你的文件所有者成为适合你需要的任何类,从这个类中公开一个自定义IBOutlet并将它连接到你的XIB中的对象。
- 例如,你可以有一个
MyCustomClass
类声明的IBOutlet UIView* myOtherView;
。将您的XIB中的File's Owner
的类定义为类MyCustomClass
,然后将myOtherView
插座绑定到视图以从您的XIB加载。然后,在代码中,创建的MyCustomClass
一个实例,并通过使该MyCustomClass
实例作为owner
参数 - 或者您可以重用
UIViewController
该加载主XIB加载从次级XIB您的其他视图太使用上面loadNibNamed:owner:options:
方法:只需在您的UIViewController
子类中添加IBOutlet UIView* otherView
即可。在您的第一个XIB中,您将连接view
IBOutlet到您的主视图,但保持otherView
IBOutlet未连接。在您的第二个XIB中,您将连接otherView
IBOutlet到您的其他视图,但保持view
IBOutlet未连接。当用第一个XIB加载你的UIViewController
时,view
属性将被设置为从你的XIB加载的视图。然后,如果您想稍后从另一个XIB延迟加载otherView
,只需拨打loadNibNamed:owner:options
,OtherXIB.xib
作为笔尖名称,self
作为所有者。OtherXIB
将被取消存档,otherView
属性将填充该加载的视图。
在这个例子中,你使用的是故事板,对吧? – yoninja
你为什么添加另一个xib。您可以在xib上添加视图。 –