2012-09-14 44 views
0

我正在开发一个iOS应用程序。我有一个控制器:iPhonePopUpController,在这个控制器我有这样的图像的厦门国际银行:enter image description here带有许多xib的UIViewController

我的问题是,我可以在其他XIB添加到该控制器并加载它,当我需要它,或者我应该创建第二个控制器加载我的第二个xib? enter image description here

+0

在这个例子中,你使用的是故事板,对吧? – yoninja

+1

你为什么添加另一个xib。您可以在xib上添加视图。 –

回答

0

您使用可以加载一个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]; 

这段代码基本上做到内部是它存储的nibNamebundle您在某些内部属性中提供,并且在需要加载其视图时(尤其是第一次需要将其显示在屏幕上时),它会使用类似上面引用的行的方式从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:optionsOtherXIB.xib作为笔尖名称,self作为所有者。OtherXIB将被取消存档,otherView属性将填充该加载的视图。
相关问题