一;執行過程spa
1,tableView進入編輯狀態代理
用戶點擊一個按鈕,讓程序進入編輯狀態,對象
self.tableView.editing = YES;it
2,詢問tableView的cell可否編輯io
tableView詢問dataSource代理,讓它執行一個代理方法詢問每一行的編輯狀態table
即-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath //默認爲yes,即在editing = yes時,默認全部行均可刪除class
3,詢問tableView的編輯類型(刪除仍是添加)程序
tableView詢問 delegate代理每一行的編輯狀態方法
即-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath //默認狀況下爲刪除im
其中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對象,來制定插入位置
}
}