【问题标题】:Add a subview (created in xib) into a UIView将子视图(在 xib 中创建)添加到 UIView
【发布时间】:2014-07-31 01:58:56
【问题描述】:

我有一个 UIView,其中包含 3 个其他子视图。一开始,我并没有将这 3 个子视图添加到 UIView 中,而是分别创建如下:

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

将 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]; [自我添加子视图:子视图1];

我的代码有什么问题?

【问题讨论】:

  • 您可以在主视图中拥有 3 个子视图,并在需要时调用这些视图。隐藏剩余的视图并将子视图置于要显示的视图前面。

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


【解决方案1】:

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

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

文件 → 新建 → 文件... → 用户界面 → 视图

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

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

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

【讨论】:

    【解决方案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];
    

    我相信它一定会成功的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 2018-10-07
      • 2015-06-20
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多