滚动时UITableView重绘问题

时间:2013-09-03 13:02:11

标签: iphone ios objective-c uitableview

我有一个分组UITableView,我从列表中填充 在某些行上我不想披露,有些行我需要添加标签 但是以某种方式混合了一些东西并在错误的行上添加标签并在每一行显示披露 我在这里做错了什么?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     static NSString *CellIdentifier = @"Cell";
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if(cell == nil)
     {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;       
            cell.accessoryView = [[ UIImageView alloc ]
                                  initWithImage:[UIImage imageNamed:@"customdisclosure.png" ]];
     }

     NSDictionary *dictionary = [_list objectAtIndex:indexPath.section];
     NSArray *array = [dictionary objectForKey:@"Items"];
     NSString *cellValue = [array objectAtIndex:indexPath.row];
     cell.textLabel.text = cellValue;

     if([cell.textLabel.text isEqualToString:@"with label"])
     {
            cell.accessoryType = UITableViewCellAccessoryNone;
            cell.detailTextLabel.textColor = [UIColor blackColor];
            cell.detailTextLabel.text = @"label...";
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
     }
     else if([cell.textLabel.text isEqualToString: @"No disclosure" ])
     {
            cell.accessoryType = UITableViewCellAccessoryNone;
     }

     return cell;
}

2 个答案:

答案 0 :(得分:3)

在您的else if子句中,您没有清除重用单元格上的cell.detailTextLabel文本。设置为零,你会没事的。

cell.detailTextLabel.text = nil;

您还需要隐藏accessoryView子句中的else if,并取消隐藏。

cell.accessoryView.hidden = YES;

总的来说,我会考虑对UITableViewCell进行子类化,以便您可以覆盖prepareForReuse重置您的单元格以进行下一次cellForRowAtIndexPath调用。

答案 1 :(得分:-1)

猜测问题在于使用可重用标识符。对不需要accessoryView的单元格使用不同的单元格标识符。

static NSString *CellWithDisclosure = @"CellID_WithDisclosure";
static NSString *CellWithNoDisclosure = @"CellID_NoDisclosure";

NSDictionary *dictionary = [_list objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:@"Items"];
NSString *cellValue = [array objectAtIndex:indexPath.row];

if([cell.textLabel.text isEqualToString:@"with label"])
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellWithDisclosure];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
else if([cell.textLabel.text isEqualToString: @"No disclosure" ])
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellWithNoDisclosure];
    cell.accessoryType = UITableViewCellAccessoryNone;
}

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellID] autorelease];
}

cell.textLabel.text = cellValue;
return cell;