/*注:以下讨论框架自带,自定义的以后记录*/
一.编辑状态删除一行
1.需要编辑按钮,进入编辑状态
self.navigationItem.rightBarButtonItem = self.editButtonItem;
这里需要说明一点,这个显示在导航条上的按钮点击会改变名字,如Edit/Done(或者中文),这个title可以自己设定,另外设置vc的editing属性也会改变其title,也就说这个按钮的title和tableVIew所处的状态是关联的。
2.当点击 编辑/完成 按钮时
-(void)setEditing:(BOOL)editing animated:(BOOL)animated{
[super setEditing:editing animated:animated];
[self.navigationItem setHidesBackButton:YES];
if(editing){
[self.tableView setEditing:YES animated:YES];
}else{
[self.tableView setEditing:NO animated:YES];
[self.navigationItem setHidesBackButton:NO];
}
}
3.delegate返回编辑样式
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewCellEditingStyleDelete;
}
4.dataSource执行删除--编辑处理方法-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
if(editingStyle == UITableViewCellEditingStyleDelete){
[self.dataArray removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
二.滑动删除一行
1.dataSource返回允许编辑
-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
return YES;
}
2.实现编辑处理方法
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
if(editingStyle == UITableViewCellEditingStyleDelete){
[self.dataArray removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
3.滑动手势开始与结束代理方法delegate
-(void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath{
self.editing = YES;
[self.navigationItem setHidesBackButton:YES];
}
-(void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath{
self.editing = NO;
[self.navigationItem setHidesBackButton:NO];
}
这里说明一下,设置editing属性,是为了让滑动删除和导航条Edit按钮不冲突,并且在滑动开始可以隐藏导航条返回按钮
三.多选删除
1.设置tableView允许多行编辑
self.tableView.allowsMultipleSelectionDuringEditing =YES;
2.设置cell被选择样式
cell.selectionStyle = UITableViewCellSelectionStyleDefault;
如果认为系统选中状态难看,可以自定义选中状态背景图,生成一个UIView,定义好,然后赋值给cell.selectedBackaroundView;
3.用代理方法记录cell选中情况
//选中某一行
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if(self.editing){
[self.mulDeleteIndexSet addIndex:indexPath.row];
}
}
//取消选择中一行
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
if(self.editing){
[self.mulDeleteIndexSet removeIndex:indexPath.row];
}
}
这里我们用NSMutableIndexSet对象记录选中情况,也可以用array,dic等,视具体情况而定
4.在某一方法中删除数据,并重绘tableView,如在界面中设置一个删除按钮,或者什么
[self.dataArray removeObjectsAtIndexes:self.mulDeleteIndexSet];
[self.mulDeleteIndexSet removeAllIndexes];
[self.tableView reloadData];