UITableView編輯的實現原理和刪除

一;執行過程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對象,來制定插入位置

    }

}

相關文章
相關標籤/搜索