UITableViewCell imageView重复

时间:2012-04-21 04:19:32

标签: iphone xcode uitableview accessory

我是iphone开发的新手,我正在尝试使用UITableViewCell创建自己的“邀请你的朋友”系统。我已经检查了其他帖子,但我不知道如何解决它。我现在遇到的一个问题是,我的UITableViewCell配件正在重复。例如。当我点击这个复选框时。

http://min.us/mCHcd3kwI 这是我的项目链接,如果有人决定看它

enter image description here

如果我向下滚动,其他复选框也会标记为

enter image description here

我想知道如何解决这个问题。

这是我的代码

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
switch (section) {
    case 0:
        return 4;
        break;
    case 1:
        return [aArray count];
        break;
    case 2:
        return [bArray count];
        break;
    case 3:
        return [cArray count];
        break;
    case 4:
        return [dArray count];
        break;
    case 5:
        return [eArray count];
        break;
    case 6:
        return [fArray count];
        break;
    case 7:
        return [gArray count];
        break;
    case 8:
        return [hArray count];
        break;
    case 9:
        return [iArray count];
        break;
    case 10:
        return [jArray count];
        break;
    case 11:
        return [kArray count];
        break;
    case 12:
        return [lArray count];
        break;
    case 13:
        return [mArray count];
        break;
    case 14:
        return [nArray count];
        break;
    case 15:
        return [oArray count];
        break;
    case 16:
        return [pArray count];
        break;
    case 17:
        return [qArray count];
        break;
    case 18:
        return [rArray count];
        break;
    case 19:
        return [sArray count];
        break;
    case 20:
        return [tArray count];
        break;
    case 21:
        return [uArray count];
        break;
    case 22:
        return [vArray count];
        break;
    case 23:
        return [wArray count];
        break;
    case 24:
        return [xArray count];
        break;
    case 25:
        return [yArray count];
        break;
    case 26:
        return [zArray count];
        break;
}}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = nil;

if([tableView isEqual:self.myTableView]){
    static NSString *TableViewIdentifier = @"MyCells";
    cell = [tableView dequeueReusableCellWithIdentifier:TableViewIdentifier];
    if(cell == nil){
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TableViewIdentifier];
    }
    NSString *group;
    NSUInteger row = [indexPath row];
    cell.selectionStyle = UITableViewCellSelectionStyleGray;


    if([selectedRowsArray containsObject:[content objectAtIndex:row]]){
        cell.imageView.image = [UIImage imageNamed:@"selected@2x.png"];
    }else {
        cell.imageView.image = [UIImage imageNamed:@"unselected@2x.png"];
    }
    cell.imageView.userInteractionEnabled = YES;


    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleChecking:)];
     [cell.imageView addGestureRecognizer:tap];


    switch (indexPath.section) {
        case 0:
            group = [suggestedPeople objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 1:
            group = [aArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 2:
            group = [bArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 3:
            group = [cArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 4:
            group = [dArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 5:
            group = [eArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 6:
            group = [fArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 7:
            group = [gArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 8:
            group = [hArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 9:
            group = [iArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 10:
            group = [jArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 11:
            group = [kArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 12:
            group = [lArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 13:
            group = [mArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 14:
            group = [nArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 15:
            group = [oArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 16:
            group = [pArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 17:
            group = [qArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 18:
            group = [rArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 19:
            group = [sArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 20:
            group = [tArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 21:
            group = [uArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 22:
            group = [vArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 23:
            group = [wArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 24:
            group = [xArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
        case 25:
            group = [yArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;

        case 26:
            group = [zArray objectAtIndex:row];
            cell.textLabel.text = group;
            break;
    }

}
return cell;

}

3 个答案:

答案 0 :(得分:3)

这是因为您只存储row以确定是否检查了单元格。由于每个部分都有一个索引为0/1的单元格,因此无法按预期工作。

if([selectedRowsArray containsObject:[content objectAtIndex:row]]){
    cell.imageView.image = [UIImage imageNamed:@"selected@2x.png"];
}else {
    cell.imageView.image = [UIImage imageNamed:@"unselected@2x.png"];
}

将其替换为:(假设您有NSMutableSet作为财产self.selectedIndexPaths

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    if ([self.selectedIndexPaths containsObject:indexPath])
    {
        cell.imageView.image = [UIImage imageNamed:@"selected@2x.png"];
    }
    else
    {
        cell.imageView.image = [UIImage imageNamed:@"unselected@2x.png"];
    }
    ...
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([self.selectedIndexPaths containsObject:indexPath])
    {
        [self.selectedIndexPaths addObject:indexPath];
    }
    else
    {
        [self.selectedIndexPaths removeObject:indexPath];
    }

    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
}

答案 1 :(得分:0)

每次需要删除子视图时设置单元格/将其设置为nil。这是来自“早期”单元格的复选标记,因为它正被表视图重用。

答案 2 :(得分:0)

如果你正在使用分组样式,那么确保正确处理索引,因为每个部分都有相同类型的索引意味着如果你有2个部分有3行,那么在这两个部分中,index.row将给出0,1,每个部分2个

并且你还必须处理单元格的可重复使用属性,即它只创建当前可见的那些单元格,然后当你擦拭表格时再次重复使用它们,这样当你回滚到之前已经检查过的前一个单元格时尽管已经过检查,但会显示为未选中。

希望这会帮助你抱歉我的英语不好因为它不是我的母语:)