在我的表中我将使用Xib加载自定义单元格,对于CellForrowatIndexPath的每个条目,都会重新创建单元格。如何避免细胞再生?
我是iPhone的新手,请帮助我。
答案 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";
}