/*注:以下讨论框架自带,自定义的以后记录*/
一.编辑状态删除一行
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];
新闻热点
疑难解答