iOS修行---TableView进阶1

来源:互联网 发布:云计算用到的技术 编辑:程序博客网 时间:2024/05/17 18:46

/*注:以下讨论框架自带,自定义的以后记录*/

一.编辑状态删除一行

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];




3 0
原创粉丝点击