使用xib加载单元格时的表视图单元格重新创建

时间:2011-09-09 08:06:06

标签: iphone uitableview

在我的表中我将使用Xib加载自定义单元格,对于CellForrowatIndexPath的每个条目,都会重新创建单元格。如何避免细胞再生?

我是iPhone的新手,请帮助我。

2 个答案:

答案 0 :(得分:4)

您可以使用标准方法来缓存以前创建的单元格。在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法中,您应该使用下一种方法创建单元格:

static NSString *CellIdentifier = @"YourCellIdentifier";
cell = (UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    // create (alloc + init) new one
    [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];        
    cell = myCell;
    self.myCell = nil;
}
// using new cell or previously created

不要忘记您将存储在所有可见单元格的内存对象中。当您滚动表格时,这些单元格将被重复使用。

例如,如果你有10个可见单元格,那么单元格将== nil 10次,你将分配+ init它们。当您向下滚动时,将创建另外一个单元格(因为将有可见的11个单元格),对于12个单元格,您将重用为第一个单元格创建的单元格。

正如@rckoenes所说,不要忘记在IB中设置相同的CellIdentifier单元格。

希望,我很清楚。

答案 1 :(得分:1)

当您从Nib加载视图时,每次调用cellForRowAtIndexPath时它都将分配内存,因此每次重写单元格而不是重新分配内存是更好的方法。 以下示例将帮助您。

自定义单元格中的参数化条带标签。像

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
lblusername=[[UILabel alloc]initWithFrame:CGRectMake(70, 10, 150, 25)];
    lblusername.backgroundColor=[UIColor clearColor];
    lblusername.textColor=[UIColor colorWithRed:33.0/255.0 green:82.0/255.0 blue:87.0/255.0 alpha:1.0];
    [contentview addSubview:lblusername];
    [lblusername release];
 }
return self;
}

使用下面列出的代码调用自定义单元格。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{

static NSString *CellIdentifier = @"Cell";

LeaderboardCustomeCell *cell = (LeaderboardCustomeCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[LeaderboardCustomeCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.lblusername.text=@"Hello";
}