有5个细胞,每个细胞都有一个动态标签。使用heightForRowAtIndexPath方法将单元格的高度定义为每个标签内容。现在,正在显示3个单元格。当我滚动下一个单元格然后调用cellForRowAtIndexPath一次并且在输出中任何一个(4 OR 5)单元格正确显示但另一个单元格具有第一个单元格内容(重复)。 有没有解决方法可以解决这个问题?应该调用cellForRowAtIndexPath方法2次。 我已正确定义了部分和行。
答案 0 :(得分:3)
删除判决
if(cell == nil)
那很好。我现在解决了我的问题。非常感谢你。
答案 1 :(得分:1)
您可能没有正确地重复使用单元格。滚动时,UITableView
会重复使用上一个单元格,但不会正确更改其内容。
cellForRowAtIndexPath
中的代码应与此类似:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *kCustomCellID = @"CustomCellID";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCustomCellID];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:kCustomCellID] autorelease];
}
cell.textLabel.text = [self.dataArray objectAtIndex:indexPath.row];
cell.detailTextLabel.text = [self.dateFormatter stringFromDate:[NSDate date]];
return cell;
}
你看起来像这样吗?
答案 2 :(得分:0)
由于每行没有固定大小,因此除了再次显示相同内容或某些类似内容外,您将无法重复使用它们。
我的建议是为每个不同大小的行创建一个标识符。
你说你有一个基于indexPath添加内容的开关,所以你应该根据它的大小将每个case语句中的可重用单元格出列。
答案 3 :(得分:0)
永远不要删除if(cell == nil)
。
而是清除您在单元格上添加的子视图。
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ;
}else{
NSArray *cellSubviews= [cell.contentView cellSubviews];
for (UIView * view in subviews) {
[view removeFromSuperview];
}
}
答案 4 :(得分:0)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier = [NSString stringWithFormat:@"cell %d",indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
cell.textLabel.text = @"Hello";
}
// Configure the cell.
return cell;
}
答案 5 :(得分:0)
尝试为每个单元格提供唯一标识符
NSString * CellIdentifier = [NSString stringWithFormat:" Cell%d",indexpath.row];
不知道这是否正确,但它应该解决你的问题。
答案 6 :(得分:-6)
问题是单元格不是nill所以它在滚动时多次返回相同的单元格。我从cellForRowAtIndexPath方法中删除了条件。
if (cell == nil)
现在每一次,它都在分配单元格并且工作正常。