码迷,mamicode.com
首页 > 其他好文 > 详细

UITableView编辑的实现原理和删除

时间:2015-08-16 09:21:34      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

一;执行过程

1,tableView进入编辑状态

  用户点击一个按钮,让程序进入编辑状态,

  self.tableView.editing = YES;

2,询问tableView的cell能否编辑

  tableView询问dataSource代理,让它执行一个代理方法询问每一行的编辑状态

  即-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath  //默认为yes,即在editing = yes时,默认所有行都可删除

3,询问tableView的编辑类型(删除还是添加)

  tableView询问 delegate代理每一行的编辑状态

  即-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath  //默认情况下为删除

  其中UITableViewCellEditingStyle为枚举类型

typedef NS_ENUM(NSInteger, UITableViewCellEditingStyle) {

    UITableViewCellEditingStyleNone,

    UITableViewCellEditingStyleDelete,

    UITableViewCellEditingStyleInsert

};//系统自带的三种编辑状态

 

typedef NS_ENUM(NSInteger, UITableViewCellEditingStyle) {

    UITableViewCellEditingStyleNone,

    UITableViewCellEditingStyleDelete,

    UITableViewCellEditingStyleInsert

};

4,tableView响应编辑操作

  由dataSource执行一个代理方法响应编辑操作

  即-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

  具体说明

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

{

    if (editingStyle == UITableViewCellEditingStyleDelete) {//执行删除操作

        

        //1 首先将数据源中的数据删除

        

        

        //2. 从视觉上删除,在视觉删除之前,必须将数据真实地从数据源中删除,否则程序会崩溃(下面方法中的第一个参数为NSArray类型,用来标识所要删除的row,其存放的元素为NSIndexPath对象)

        [_myTableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];

        // 注意,执行顺序不可变

        

        /**

         *  删除整个section(逻辑与删除section中的行类似)

         */

        //1 首先从数据源中删除数据

        

        //2 从视觉上删除  (下面方法中第一个参数的类型为NSIndexSet,用来标识索要删除的section)

        [_myTableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationLeft];

        

    }

    if (editingStyle == UITableViewCellEditingStyleInsert) {//执行添加操作

        // 1, 从数据源对应位置添加数据

        

        // 2 在视觉上添加(下面方法的第一个参数为制定的添加位置)

        [_myTableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];    //此时添加在了所点击的当前位置

        

        //可自定义NSIndexPath对象,来制定插入位置

    }

}

 

UITableView编辑的实现原理和删除

标签:

原文地址:http://www.cnblogs.com/puguanen-ecit/p/4733550.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!