Iphone UITableViewCell图像视图重复

Iphone UITableViewCell图像视图重复,iphone,xcode,uitableview,accessory,Iphone,Xcode,Uitableview,Accessory,我对iphone开发相当陌生,我正在尝试使用UITableViewCell创建自己的“邀请您的朋友”系统。我已经检查了其他帖子,但我不知道如何修复它。我现在遇到的一个问题是,我的UITableViewCell附件正在重复。例如当我单击此复选框时 这里是我的项目链接,如果有人决定看它 如果向下滚动,其他复选框也会被标记 我想知道我怎样才能解决这个问题 这是我的密码 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSec

我对iphone开发相当陌生,我正在尝试使用UITableViewCell创建自己的“邀请您的朋友”系统。我已经检查了其他帖子,但我不知道如何修复它。我现在遇到的一个问题是,我的UITableViewCell附件正在重复。例如当我单击此复选框时

这里是我的项目链接,如果有人决定看它

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

我想知道我怎样才能解决这个问题

这是我的密码

-(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;

}

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

这是因为您仅存储
,以确定是否选中单元格。由于每个节在索引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


如果您使用分组样式,请确保正确处理索引,因为每个部分都有相同类型的索引。也就是说,如果您有2个部分和3行,那么在这两个部分中,index.row将为每个部分提供0,1,2

此外,你还必须处理单元格的可重用属性,即它只创建当前可访问的单元格,然后在你刷新表格时再次重用这些单元格,因此,当你回滚到你以前检查过的单元格时,尽管它已被选中,但仍将显示为未选中


希望这能帮助您为我的英语不好感到抱歉,因为它不是我的母语:)

苹果不建议将分组表视图样式与右侧显示的索引结合使用。在我看来,他们是对的,因为它看起来很难看。你的数组
content
代表什么,它与数组
aArray
bArray
cArray
,等等有什么关系?“content”是一个数组,里面充满了地址簿的名/姓属性,aArray,bArray,cArray,etc.是以该字母开头的姓氏列表//如果(cell==nil)推荐这一行……他每次调用
cellforindexath:
时都显式设置单元格现有
imageView.image
属性的值。如果他添加自己的imageView,我同意问题可能是他需要在重新使用电池时删除它,但在这种情况下,我不认为是这样。啊。实际上,我并没有通读所有的开关之类的东西pdidn对我不起作用,你知道我可以研究的任何示例/开源代码吗?到底什么不起作用?你能分享一下你的整个项目吗。我可以看一下。恐怕我不明白你的代码和你想实现的目标。当我尝试运行你的应用程序时,它崩溃了。另外,只有一个部分填充了单元格。一个部分填充了单元格是什么意思?
- (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];
}