tableView Cell 出现错乱的三种解决方案
tablecell 原来应该这样写
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier =@"Cell";
// UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; //改为以下的方法
if (cell ==nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
//...其他代码
}
然而我们为了解决一些问题,进行改变
1. 根据indexPath准确地取出一行,而不是从cell重用队列中取出
在cell中 将UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; //改为更改为 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
2.通过为每个cell指定不同的重用标识符(reuseIdentifier)来解决。
NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d%d", [indexPath section], [indexPath row]];//以indexPath来唯一确定cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];//出列可重用的cell
3.删除重用cell的所有子视图
if (cell ==nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
else
{
//删除cell的所有子视图
while ([cell.contentView.subviews lastObject] !=nil)
{
[(UIView*)[cell.contentView.subviews lastObject] removeFromSuperview];
}
}