Question

I am fairly new to iphone development, and I am trying to create my own "invite your friends" system using UITableViewCell. I Have checked other posts, but i do not know how to fix it. One problem i am having right now is, my UITableViewCell accessorys are repeating. for example. when I click this checkbox.

http://min.us/mCHcd3kwI here is my project link if anyone decides to look at it

enter image description here

and if i scroll down, other checkboxs are also marked

enter image description here

I am wondering how can i fix this.

here is my code

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

}

Was it helpful?

Solution

It's because you are only storing the row to determine whether a cell is checked or not. Since every section has a cell at index 0/1, this does not work as you want it to.

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

Replace it with this: (assuming you you have an NSMutableSet as a property 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];
}

OTHER TIPS

when you set up the cell each time you need to remove the subview/set it to nil. that is the checkmark from the " earlier" cell since it is being reused by the table view.

If your are using grouped style them make sure to handle the indexing properly because every section will have same type of indexing mean if u have 2 section with 3 rows then in these two sections the index.row will give 0,1,2 for every section

and also u have to handle the reuseable property of the cells i.e it creats only those cells which are currently visisble and then again reuse them when u scrll the table so when u sroll back to your previous cell which have u checked before will be shown you as unchecked though it is checked.

hope this will help you sorry for my bad english cause it is not my native language :)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top