美文网首页iOS技术iOSiOS UI控件
iOS UITableView左滑删除功能

iOS UITableView左滑删除功能

作者: CoderMikeHe | 来源:发表于2017-02-13 12:52 被阅读6684次
    一、概述

    UITbableView作为列表展示信息,除了展示的功能,有时会用到删除的功能,比如购物车视频收藏等。删除功能可以直接使用系统自带的删除功能,当横向向左轻扫cell时,右侧出现红色的删除按钮,点击删除当前cell。

    二、效果图
    效果图.gif
    三、技术分析
    1. 让tableView进入编辑状态,即tableView.editing = YES
    // 取消
    [self.tableView setEditing:YES animated:NO]; 
    
    1. 返回编辑模式,即实现UITableViewDelegate中的- tableview:editingStyleForRowAtIndexPath:方法,在里面返回删除模式。如果不实现,默认返回的就是删除模式。
    -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
    {
              // 删除
              return UITableViewCellEditingStyleDelete;
    }
    
    1. 提交删除操作,即实现UITableViewDelegate中的- tableview:commitEditingStyle:editing StyleForRowAtIndexPath:方法。只要实现此方法,即默认实现了系统横扫出现删除按钮的删除方法。
    -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
    {
            //只要实现这个方法,就实现了默认滑动删除!!!!!
            if (editingStyle == UITableViewCellEditingStyleDelete)
            {
                // 删除数据
                [self _deleteSelectIndexPath:indexPath];
            }
    }
    
    1. 如果想把删除按钮改为中文,可以实现-tableView:titleForDeleteConfirmationButtonForRowAtIndexPath:方法。
    -(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
    {
              return @"删除";
    }
    
    四、细节处理
    1. 以下属性必须设置为NO,默认为NO,否则会导致删除模式无效,反而成为多选模式
    tableView.allowsMultipleSelection = NO;
    tableView.allowsSelectionDuringEditing = NO;
    tableView.allowsMultipleSelectionDuringEditing = NO;
    
    1. 侧滑状态下点击编辑按钮的bug。
    // 编辑按钮被点击
    - (void)_rightBarButtonItemDidClicked:(UIButton *)sender
    {
            sender.selected = !sender.isSelected;
            if (sender.isSelected) {
            
                // 这个是fix掉:当你左滑删除的时候,再点击右上角编辑按钮, cell上的删除按钮不会消失掉的bug。且必须放在 设置tableView.editing = YES;的前面。
                [self.tableView reloadData];
            
                // 取消
                [self.tableView setEditing:YES animated:NO];
            }else{
                // 编辑
                [self.tableView setEditing:NO animated:NO];
            }
    }
    
    五、期待
    1. 文章若对您有点帮助,请给个喜欢💗;若没啥帮助,请给点建议。
    2. 针对文章所述,您阅读有什么疑问;或使用Demo中有什么bug。请在文章底部评论,我会尽快解决问题。
    3. GitHub地址:https://github.com/CoderMikeHe
    六、代码

    MHDevelopExample_Objective_C - MHDeleteController.h/m

    相关文章

      网友评论

        本文标题:iOS UITableView左滑删除功能

        本文链接:https://www.haomeiwen.com/subject/aqizittx.html