我在 XIB 文件中外部化了一个组件,因此我可以在几个不同的视图中重用它。现在在我的视图控制器中,我加载了基于 XIB 的 UIView 并将其添加到当前视图中:
NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"ThumbsPreviewView" owner:self options:nil];
_likePreview = [views objectAtIndex:0];
[self.view addSubview:_likePreview];
起初,我认为它不起作用……但实际上它起作用了,只是将根视图(即我的所有图形组件的容器,它是透明的)放到我的视图中。
所以我需要把这种代码(对于每个子组件)让它工作:
[self.view addSubview:_likePreview];
NSArray *subviews = _likePreview.subviews;
for(UIView * subview in subviews) {
[self.view addSubview:subview];
}
这是非常违反直觉的,而且我认为它不会创建我想要的视图层次结构。
我确信有一个解决方案,因为我在 UITableViewController 中做了同样的事情来从 XIB 加载自定义表头。在这种情况下使用完全相同的 XIB 文件可以正确加载所有内容。这是代码:
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
switch(section) {
case 0: {
NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"ThumbsPreviewView" owner:self options:nil];
_likePreview = [views objectAtIndex:0];
return _likePreview;
}
}
return [super tableView:tableView viewForHeaderInSection:section];
}
使用上面的代码,一切都很好,我得到了整个视图(= 包含所有内容的根视图容器)作为我的表格部分的标题。
所以问题是:在我的第一个例子中我做错了什么?如何将所有内容(容器 + 所有内容)添加到我的父 UIView 作为适当的 UIView 层次结构?
编辑:我需要准确地将所有内容都组织在我的 XIB 文件中的单个根 UIView 中,如下所示(我无法发布图像):
* Thumbs preview view
|_ Button
|_ Image View
|_ Image View
|_ Image View
|_ Image View
|_ Button
|_ Button
|_ Button
|_ Label
非常感谢您的帮助 !
克里斯托夫