我在这里找到了类似的问题:How to load a UIView using a nib file created with Interface Builder。 但我的问题有点不同。我需要将自定义视图加载到2或3个不同的UIViewControllers中。这里有我喜欢的答案https://stackoverflow.com/a/4055353/602011但是我无法一起为myViewXib FileOwner设置三个UIViewCOntrollers。怎么样?
答案 0 :(得分:2)
在IB中,您可以将FileOwner类类型设置为 UIViewController ,然后使用NSBundle的 loadNibNamed:owner:options:方法加载NIB并迭代返回的对象命令修改或引用NIB中的任何子UIView。
NSArray* topLevelObjects = [ [ NSBundle mainBundle ] loadNibNamed:"bla"
owner:self
options:nil ] ];
for( id object in topLevelObjects )
{
if( [ object isKindOfClass:[ UILabel class ] ] )
{
UILabel* label = ( UILabel* ) object;
label.text = @"This is My Label Now!";
}
}
答案 1 :(得分:0)
如果你想让一个xib文件作为几个视图控制器的xib,那么基本上所有控制器都有相同的插座,但内部逻辑不同,我会说你可以创建一个带有插座的基类,设置IB在xib中使用该类,然后从那个继承你的其他控制器。
通过这种方式,您可以加载通用视图,并将其与更具体的控制器连接。但只有当它与所有控制器的xib完全相同时才会起作用。
这是基于我想你想做这样的事情:
AViewController *c1 = [[AViewController alloc] initWithNibName:@"MyXib" bundle:nil];
BViewController *c2 = [[BViewController alloc] initWithNibName:@"MyXib" bundle:nil];