【发布时间】: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