首页 > 代码库 > UITableViewCell 添加 checkbox 多选 (二)

UITableViewCell 添加 checkbox 多选 (二)

其实苹果原生就有cell的多选,不过做出来的效果是这样的技术分享技术分享技术分享技术分享


我的大概逻辑是这样考虑的  

(一)先考虑右上角button的事情,平时是delete,当cell时编辑状态就换成done

(二)考虑cell的编辑状态

其实cell有一个函数可以直接对cell进行编辑

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
    return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
    
}
下面这两个是执行cell选中和非选中时的转态
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
  
}

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
 
}
接下来很明显就是对数组进行操作了,定义两个可变数组
@property(nonatomic,strong)NSMutableArray * list;
@property(nonatomic,strong)NSMutableArray * removeList;

在viewDidLoad里面操作右导航,并且把两个数组初始化

- (void)viewDidLoad {

    [super viewDidLoad];
    UIBarButtonItem * item = [[UIBarButtonItem alloc] initWithTitle:@"Delecte" style:UIBarButtonItemStyleBordered target:self action:@selector(editCell:)];
    self.navigationItem.rightBarButtonItem = item;
    
    if (self.list == nil) {
        self.list = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5", nil];
    }
    self.removeList = [[NSMutableArray alloc] init];
   
    
}

- (void)editCell:(id)sender{
    [self.tableView setEditing:!self.tableView.editing animated:YES];
    if (self.tableView.editing) {
        [self.navigationItem.rightBarButtonItem setTitle:@"Done"];//cell可编辑状态右导航切换主题
    }else{//进入不可编辑转态,就是还原了
        [self.navigationItem.rightBarButtonItem setTitle:@"Delete"];
        if (self.removeList.count>0) {//大于零就进行移除操作

//逻辑:1,移除数组大于零,list执行移除remove里面的数组

              2.cell刷新数据

              3,remove清零

            [self.list removeObjectsInArray:self.removeList];
            [self.tableView reloadData];
            [self.removeList removeAllObjects];
        }
        
    }
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.list.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"ID"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"ID"];
    }
    cell.textLabel.text = self.list[indexPath.row];
    return cell;

}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
    return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [self.removeList addObject:self.list[indexPath.row]];//当选中时操作移除的数组增加选中转态数组里面的元素
}
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
    [self.removeList removeObject:self.list[indexPath.row]];//非选中就移除
}


UITableViewCell 添加 checkbox 多选 (二)