iOS修行---TableView进阶1

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

一.编辑状态删除一行

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值