标签:
一;执行过程
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对象,来制定插入位置
}
}
标签:
原文地址:http://www.cnblogs.com/puguanen-ecit/p/4733550.html