/*注:以下討論框架自帶,自定義的以后記錄*/
一.編輯狀態刪除一行
1.需要編輯按鈕,進入編輯狀態
self.navigationItem.rightBarButtonItem = self.editButtonItem;這里需要說明一點,這個顯示在導航條上的按鈕點擊會改變名字,如Edit/Done(或者中文),這個title可以自己設定,另外設置vc的editing屬性也會改變其title,也就說這個按鈕的title和tableVIew所處的狀態是關聯的。
2.當點擊 編輯/完成 按鈕時
-(void)setEditing:(BOOL)editing animated:(BOOL)animated{ [super setEditing:editing animated:animated]; [self.navigationItem setHidesBackButton:YES]; if(editing){ [self.tableView setEditing:YES animated:YES]; }else{ [self.tableView setEditing:NO animated:YES]; [self.navigationItem setHidesBackButton:NO]; }}3.delegate返回編輯樣式-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{ return UITableViewCellEditingStyleDelete;}4.dataSource執行刪除--編輯處理方法-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{ if(editingStyle == UITableViewCellEditingStyleDelete){ [self.dataArray removeObjectAtIndex:indexPath.row]; [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; }}二.滑動刪除一行1.dataSource返回允許編輯
-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{ return YES;}2.實現編輯處理方法-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{ if(editingStyle == UITableViewCellEditingStyleDelete){ [self.dataArray removeObjectAtIndex:indexPath.row]; [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; }}3.滑動手勢開始與結束代理方法delegate-(void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath{ self.editing = YES; [self.navigationItem setHidesBackButton:YES];}-(void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath{ self.editing = NO; [self.navigationItem setHidesBackButton:NO];}這里說明一下,設置editing屬性,是為了讓滑動刪除和導航條Edit按鈕不沖突,并且在滑動開始可以隱藏導航條返回按鈕三.多選刪除
1.設置tableView允許多行編輯
self.tableView.allowsMultipleSelectionDuringEditing =YES;2.設置cell被選擇樣式cell.selectionStyle = UITableViewCellSelectionStyleDefault; 如果認為系統選中狀態難看,可以自定義選中狀態背景圖,生成一個UIView,定義好,然后賦值給cell.selectedBackaroundView;3.用代理方法記錄cell選中情況
//選中某一行-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ if(self.editing){ [self.mulDeleteIndexSet addIndex:indexPath.row]; }}//取消選擇中一行-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{ if(self.editing){ [self.mulDeleteIndexSet removeIndex:indexPath.row]; }} 這里我們用NSMutableIndexSet對象記錄選中情況,也可以用array,dic等,視具體情況而定4.在某一方法中刪除數據,并重繪tableView,如在界面中設置一個刪除按鈕,或者什么
[self.dataArray removeObjectsAtIndexes:self.mulDeleteIndexSet]; [self.mulDeleteIndexSet removeAllIndexes]; [self.tableView reloadData];
新聞熱點
疑難解答