将子视图(在xib中创建)添加到UIView中

时间:2014-06-10 10:32:19

标签: ios iphone objective-c cocoa-touch uiview

我有一个UIView,其中包含3个其他子视图。一开始,我不会将这3个子视图添加到UIView中,而是按照以下方式单独创建它们:

enter image description here

我想动态添加子视图。所以我尝试以下代码:

将MainView添加到UIViewController

UINib *nib = [UINib nibWithNibName:@"MainView" bundle:nil];
MainView* mainView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
[self.view addSubview:mainView];

到目前为止还可以。但是现在,在MainView类中,我添加了subView,我崩溃了

UINib *nib = [UINib nibWithNibName:@"SubView1" bundle:nil];
SubView1* subView1 = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
[self addSubview:subView1];

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:2)

我不知道为什么它崩溃导致我从未使用过这种类型。所以我建议你试试下面的

UIView *mainView=[[[NSBundle mainBundle] loadNibNamed:@"yourNibName" owner:self options:nil] objectAtIndex:0];
[[self view] addSubview:mainView];

以同样的方式

UIView *subView1=[[[NSBundle mainBundle] loadNibNamed:@"yourNibName" owner:self options:nil] objectAtIndex:1];
[mainView addSubview:subView1];

UIView *subView2=[[[NSBundle mainBundle] loadNibNamed:@"yourNibName" owner:self options:nil] objectAtIndex:2];
[mainView addSubview:subView2];

UIView *subView3=[[[NSBundle mainBundle] loadNibNamed:@"yourNibName" owner:self options:nil] objectAtIndex:3];
[mainView addSubview:subView3];

我相信它肯定会工作

答案 1 :(得分:0)

在我看来,您将所有子视图添加到同一个nib(或xib)文件中。因此,没有名称" SubView1"。

的笔尖

要解决此问题,请为每个视图添加单独的xib文件:

文件→新建→文件...→用户界面→查看

并相应地命名这些文件,或者在视图控制器类中保留对视图的引用。您可以通过为视图创建出口来实现。或者,您可以为每个视图分配标记,并使用UIView方法-viewWithTag:获取对该特定视图的引用。

但是,我建议使用@Manthan在评论中建议的方法 - 如果可能:在界面构建器中将所有子视图添加到mainView,并将其hidden属性设置为YES。然后,当您希望这些视图显示时,请在代码中使用[yourView setHidden:NO];

如果这对您不起作用,我建议您使用第一种方法和单独的xib文件。

相关问题