我有一个UIView,我在一个特定的部分(特别是第1节)中添加了一个单元格的内容视图,如下所示:
[cell.contentView addSubview:self.overallCommentViewContainer];
当我快速向上/向下滚动时 - UIView出现在第0节 - 即使我从未将UIView添加到第0节中的任何单元格中。
以下是我的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];
}
// Configure the cell.
switch(indexPath.section) {
case 0:
// other code
break;
case 1:
// add the overall comment view container to the cell
NLog(@"adding the overallCommentViewContainer");
[cell.contentView addSubview:self.overallCommentViewContainer];
NLog(@"creating the row at: Section %d, Row %d", indexPath.section, indexPath.row);
break;
}
return cell;
}
答案 0 :(得分:3)
如果UITableView已经准备好重用单元格,它的dequeueReusableCellWithIdentifier方法将很乐意返回最初在第1节中使用的第0节的单元格!我推荐这样的东西让你分开:
UITableViewCell *cell;
// Configure the cell.
switch(indexPath.section) {
case 0:
cell = [tableView dequeueReusableCellWithIdentifier:@"Section0Cell"];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"Section0Cell"] autorelease];
}
// other code
break;
case 1:
cell = [tableView dequeueReusableCellWithIdentifier:@"Section1Cell"];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"Section1Cell"] autorelease];
// add the overall comment view container to the cell
NLog(@"adding the overallCommentViewContainer");
[cell.contentView addSubview:self.overallCommentViewContainer];
}
NLog(@"creating the row at: Section %d, Row %d", indexPath.section, indexPath.row);
break;
}
return cell;
关键是为您正在使用的每种类型的单元使用不同的标识符字符串,该字符串不能与表中的其他单元格互换。