Reputation: 155
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
and if i scroll down, other checkboxs are also marked
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:@"[email protected]"];
}else {
cell.imageView.image = [UIImage imageNamed:@"[email protected]"];
}
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;
}
Upvotes: 2
Views: 1072
Reputation: 1424
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 :)
Upvotes: 0
Reputation: 10776
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:@"[email protected]"];
}else {
cell.imageView.image = [UIImage imageNamed:@"[email protected]"];
}
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:@"[email protected]"];
}
else
{
cell.imageView.image = [UIImage imageNamed:@"[email protected]"];
}
...
}
- (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];
}
Upvotes: 3
Reputation: 9820
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.
Upvotes: 0