【问题标题】:iOS - Interface Builder - bind multiple view inside the same xibiOS - Interface Builder - 在同一个 xib 中绑定多个视图
【发布时间】:2014-01-01 12:11:38
【问题描述】:

我正在尝试将复杂的 xib 组织到多个视图中。

假设以下场景:

我的主视图(绿色)包含两个子视图(红色和黄色)。
实际上我可以创建三个 xib 并以编程方式添加子视图。
我找到了一个更聪明的解决方案:我在主视图(绿色)中定义了两个 IBOutlet 并将它们连接到子视图。

@property (nonatomic, weak) IBOutlet RedView * redView;
@property (nonatomic, weak) IBOutlet YellowView * yellowView;

在主视图实现中,我以编程方式添加了子视图:

- (void)awakeFromNib
{
    [super awakeFromNib];
    self.redView.frame = self.frame;
    self.redView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    self.yellowView.frame = self.frame;
    self.yellowView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

    [self addSubview:self.redView];
    [self addSubview:self.yellowView];
}

如您所见,我需要设置当前帧大小、autoresizingMask 并将子视图添加到父视图。

问题:

有没有直接从 xib 执行这些操作的好方法? 我想加载 xib(“loadNibNamed”)并获取已经填充了子视图的主视图(绿色)。

我尝试了一些解决方案,但都没有成功...

编辑:
我不想在 IB 中直接将红色和黄色视图添加为子视图。
这两个子视图与父视图一样大,这使得使用 Interface Builder 变得复杂(隐藏黄色视图并处理红色,然后隐藏红色并处理黄色......)。
我想在同一个 xib 中有单独的视图,但能够在父子树中“组合”它们......

【问题讨论】:

  • 是的,您可以将两个子视图放在 xib 中的绿色子视图内。如果您希望它们成为子视图,为什么要将它们作为单独的视图?
  • 假设红色和黄色视图与绿色视图一样大,因为我应用了水平滑动效果,因此当时只有一个孩子可见。如果我将两个子视图放入父视图(好的,这很好)变得更难使用 IB(隐藏红色视图并处理黄色,然后隐藏黄色并处理红色,等等......) .
  • 您不需要隐藏视图,您可以像 Clever Error 在他的回答中建议的那样对它们重新排序。在任何情况下,xib 都无法自动为您添加子视图,您需要像您展示的那样在代码中执行此操作。
  • 这可能是一个不错的功能请求;)非常感谢您的回答!

标签: ios interface-builder xib addsubview subviews


【解决方案1】:

而不是通过将视图拖到开放空间中来创建红色和黄色视图。将视图拖到绿色视图上。然后它将被添加为子视图。

您只能使用左侧的列表来移动现有视图。将列表中与红色视图对应的行拖到列表中与绿色视图对应的行上。

【讨论】:

  • 绿色视图只是两个子视图的容器,与父视图一样大。真实内容显示在子视图上,我对它们应用滑动效果。当时只有一个子视图可见。我想将 IB 中的子视图分开以更好地处理它们。否则,每次我不感兴趣的视图时,我都必须隐藏......我想将 IB 中的子视图分开,以便更好地处理它们。否则我得一直隐藏,我不感兴趣的观点……
猜你喜欢
  • 1970-01-01
  • 2014-09-03
  • 2012-04-19
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
相关资源
最近更新 更多