UITableView的多选删除模式

1.设置TableView编辑模式打开;

    [_tableView setEditing:YES];

2.设置接收被选中等待编辑的cell的可变数组,并设置BOOL型变量记录是否处于编辑模式

    NSMutableArray *_waitArray;

    BOOL _isEdit;

3.在设置切换编辑状态按钮时,设置为系统自带的。self.editButtonItem是一个系统自带的专用按钮。作用是为了设置表格(tableView)的编辑状态,在其点击事件中可以切换编辑状态/非编辑状态

   self.navigationItem.leftBarButtonItem = self.editButtonItem;

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{//系统自带的专用按钮 self.editButtonItem 的点击事件
    //需要重载父类的方法  先调用父类
    [super setEditing:editing animated:YES];
    //这个方法中的editing 会自动改变
    [_tableView setEditing:editing animated:YES];
    //改变编辑状态的时候 清空待删除数组 (退出编辑模式后 不执行删除)
    [_watiArray removeAllObjects];
    //设置专用按钮为全局变量
  if (editing) {
        self.navigationItem.rightBarButtonItem = _deleteBBi;
    } else {
        self.navigationItem.rightBarButtonItem = nil;
    }
}

4.在返回编辑模式类型的函数里设置编辑模式为 删除 | 插入 TableView即被设置为多选且在编辑模式下默认第一次点击Cell为被选中,在选中状态下再次点击为取消选中

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
}

5.在cell被选择函数中,在Cell被选中时,先判断是否处于编辑模式。如果是编辑模式,将选中的cell加入等待操作的数组里

如果不是编辑模式,要设置从选中状态直接跳转为非选中模式,不激发反选函数

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView.editing) {
        //如果是编辑模式,就将点击的cell对应的数据添加到待删除数组中
        [_tempArr addObject:[_dataArr objectAtIndex:indexPath.row]];
    }else{
        //如果不是编辑模式 那就该干嘛干嘛 (取消选中状态)
        [tableView deselectRowAtIndexPath:indexPath animated:YES];
        //非编辑模式下从选中到不被选中 不执行反选激发函数
    }
}
6.在Cell的反选函数中,在Cell被取消选择时先判断是否处于编辑模式,如果处于编辑模式将被反选的数据移除等待操作的数组

如果处于非编辑模式,不执行任何操作

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView.editing) {//如果处于编辑状态,就将反选的数据从待删除数组中清除
        [_tempArr removeObjectAtIndex:indexPath.row];
    }else{
        NSLog(@"000");
    }
}
7.在删除按钮的点击事件中,执行删除操作删除结束后刷新列表

- (void)deleteClick
{
    //数据源中删除 待删除数组包含的元素
    [_dataArray removeObjectsInArray:_waitArray];
   //刷新列表

    [_tableView reloadData];
}

 

posted @ 2015-04-02 20:32  小学生之码  阅读(336)  评论(0编辑  收藏  举报