Iphone 在UITableView中滚动后项目混淆
当我在UITableView中滚动时,单元格会混淆。 我做错了什么 这是我的方法:Iphone 在UITableView中滚动后项目混淆,iphone,cocoa-touch,Iphone,Cocoa Touch,当我在UITableView中滚动时,单元格会混淆。 我做错了什么 这是我的方法: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableC
- (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] autorelease];
}
[cell insertSubview:[itemArray objectAtIndex:indexPath.row] atIndex:indexPath.row];
return cell;
}
更新
它现在通过使用cell.contentView工作,但现在当我选择一个项目时,所选项目与另一个单元格的内容重叠…我认为您的问题在于,您将行逻辑应用于单元格内的视图层次结构,而不是单元格本身 这一行:
[cell insertSubview:[itemArray objectAtIndex:indexPath.row] atIndex:indexPath.row];
从数组中获取视图,并将其添加到单元格现有子视图堆栈的特定index.row处的单元格子视图中。它不会确保将正确的视图插入到正确的单元格中。如果您从未从上一次迭代中删除视图,那么您将看到所有这些视图都堆积在单独的重用单元中
至少,在添加最多的单元子视图之前,需要删除以前添加的所有单元子视图。您还应该只向单元格的contentView
视图添加子视图,而不向单元格本身添加子视图
因此:
TechZen在这里的建议是正确的。从代码中可以清楚地看出,您误解了insertSubview:atIndex。我想您可能还需要更好地了解tableView:CellForRowatineXpath:何时调用和何时不调用 不幸的是,您从sagar这里得到了一些不好的建议,这可能会让您更加困惑,特别是因为它可能在一开始看起来是有效的,但它会破坏您的滚动性能和内存使用。为了他的利益和你们的利益,让我尝试澄清tableView:cellforrowatinexpath:和重用标识符的概念 理解tableView:cellForRowAtIndexPath:和重用标识符的关键是理解构建UITableViewCell的成本很高。考虑所有你需要做的事情:
if(cell==nil){}
块中,放置所有单元格通用的所有设置代码。在该块下面,只放置填充每行唯一内容的代码。要访问每行内容都要更改的自定义子视图,可以使用-[UIView viewWithTag:],或者更好的方法是创建UITableViewCell的子类,并将自定义子视图作为子类的属性公开
[[cell.contentView.subviews objectAtIndex:0] removeFromSuperview];
[cell.contentView addSubview:[itemArray objectAtIndex:indexPath.row]];