使用自定义子视图滚动UITableView时复制数据

这工作之前,除非这么长时间,我忽略了一些东西。 当表格第一次显示一切看起来不错时,但如果我向上和向下滚动标签获得重复的内容。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *CellIdentifier = @"CellIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil){ cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; UILabel *labelName = [[UILabel alloc] initWithFrame:CGRectMake(20, 0, tableView.frame.size.width, 35)]; labelName.tag = 20; [cell addSubview:labelName]; } ((UILabel *)[tableView viewWithTag:20]).text = [data objectAtIndex:indexPath.row]; return cell; } 

我发现了挑起它的线!

 ((UILabel *)[tableView viewWithTag:20]).text = [data objectAtIndex:indexPath.row]; 

你通过发送-viewWithTag:获取标签-viewWithTag: tableView但你应该问单元格。

在一个侧面说明,最好是将子视图添加到单元格的contentView

这是正确的实施。

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"CellIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (!cell){ cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; UILabel *labelName = [[UILabel alloc] initWithFrame:CGRectMake(20, 0, tableView.frame.size.width, 35)]; labelName.tag = 20; [cell.contentView addSubview:labelName]; } ((UILabel *)[cell.contentView viewWithTag:20]).text = [data objectAtIndex:indexPath.row]; return cell; } 

if (cell == nil)条件内写下这个波纹线

 labelName.text = [data objectAtIndex:indexPath.row]; 

并评论或删除这个波纹线..

 ((UILabel *)[tableView viewWithTag:20]).text = [data objectAtIndex:indexPath.row];