我有一个观点,它在其他视图中重复。因此,为了避免重复代码和xibs,我想将子xib嵌套在其他xib(父级)中。
为此目的,我的父xib有一个View,然后我将以编程方式实例化子xib。
我使用这篇文章http://www.secretlab.com.au/blog/2012/06/17/embedding-external-nibs-for-fun-and-profit来指导我。
但我的问题是如果我在UITableViewCells中这样做。我希望可重复使用的细胞高效。我必须始终实例化子视图。我怎么能避免这种情况?
我的代码:
cellForRowAtIndexPath:
DetailPostCell *cell = (DetailPostCell *) [tableView dequeueReusableCellWithIdentifier:REUSE_IDENTIFIER_DETAIL_POST_CELL];
if (cell == nil) {
UINib* customCellNib = [UINib nibWithNibName:REUSE_IDENTIFIER_DETAIL_POST_CELL bundle:nil];
[tableView registerNib: customCellNib forCellReuseIdentifier:REUSE_IDENTIFIER_DETAIL_POST_CELL ];
cell = (DetailPostCell *)[tableView dequeueReusableCellWithIdentifier:REUSE_IDENTIFIER_DETAIL_POST_CELL];
}
/*Inflate subiview*/
SubViewCell *subCell = [SubViewCell loadFromNib];
[cell.view addSubview:subCell];
[cell fillCellWithPost:post];
return cell;
+ (SubViewCell *)loadFromNib {
UINib* nib = [UINib nibWithNibName:NSStringFromClass([self class]) bundle:nil];
NSArray* objects = [nib instantiateWithOwner:self options:nil];
return [objects objectAtIndex:0];
}
答案 0 :(得分:1)
在DetailPostCell
课程中,您应在此处添加SubViewCell
视图,而不是cellForRowAtIndexPath:
这样,无论细胞重用如何,您每次都不会添加子视图。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Code to dequeue DetailPostCell
[cell updateSubviewPost:post];
}
然后,updateSubviewPost将使用对添加的子视图的引用进行必要的填充。