在我们开发的过程中,很多时候用到tableview的单选问题,具体就是我们点击某个cell后面显示对号,再次点击对号消失.如果我们只是单纯的添加对号,就会导致cell从复用池里面取的时候,后面的对号也会自动的添加上,这就与我们的初衷相违背,那么我们要怎么做呢;下面我就来介绍一种简单的单选问题的解决方案
原理:
首先建一个可变数组,数组里面存储的数据是用来标记cell的选择状态,0代表没有被选择,1代表被选择
数组的数据的个数和cell上添加的数据的个数保持一致
值得注意的是:
1:点击的时候,先判断对应的存放标识的数组,如果是0说明我们点击的是一个新的cell,此时我们就要将数组里面所有的数换成0然后执行点击某个将某个替换成1的操作
2:当点击的是1的时候就不需要,直接将1替换成0就可以了
3:选择完成之后我们需要刷新一些tableview就可以了
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = (UITableViewCell *)[tableView cellForRowAtIndexPath:indexPath]; if ([tagArray[indexPath.row] isEqualToString:@"0"]) { NSInteger number = tagArray.count; [tagArray removeAllObjects]; for (int i = 0; i < number; i++) { [tagArray addObject:@"0"]; } cell.accessoryType = UITableViewCellAccessoryCheckmark; [tagArray replaceObjectAtIndex:indexPath.row withObject:@"1"]; [tableView reloadData]; } else if ([tagArray[indexPath.row] isEqualToString:@"1"]) { [tagArray replaceObjectAtIndex:indexPath.row withObject:@"0"]; cell.accessoryType = UITableViewCellAccessoryNone; } }
然后 在cell的创建里面,我们需要对对应的标识数组进行判断,然后我们判断其是否被选择
if ([tagArray[indexPath.row] isEqualToString:@"0"]) { cell.accessoryType = UITableViewCellAccessoryNone; } else { cell.accessoryType = UITableViewCellAccessoryCheckmark; }
这样我们就完成了简单的单选
解决这类问题还有其他的方法,比如我们在对cell进行赋值的时候.我们用的是model.那么此时我们就可以在model里面添加一条新的属性,这个属性专门是用来标记cell的选择状态