将xib嵌套在UITableViewCells中

时间:2015-06-29 08:39:41

标签: ios uitableview

我有一个观点,它在其他视图中重复。因此,为了避免重复代码和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]; 
} 

1 个答案:

答案 0 :(得分:1)

DetailPostCell课程中,您应在此处添加SubViewCell视图,而不是cellForRowAtIndexPath:

这样,无论细胞重用如何,您每次都不会添加子视图。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Code to dequeue DetailPostCell

[cell updateSubviewPost:post];
}
然后,

updateSubviewPost将使用对添加的子视图的引用进行必要的填充。