tableView的单选问题

在我们开发的过程中,很多时候用到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的选择状态

 

posted @ 2015-05-18 16:28  NSJELLY  阅读(1096)  评论(0编辑  收藏  举报