標籤:
前面介紹了萬無一失的方法一,這裡介紹刪除儲存格的第二種方式,通過刪除儲存格中的內容的方式進行操作:(但是這種情況有一個小的弊端,由於儲存格重用機制,如果儲存格內容一樣時,標記的存在會造成誤刪)
刪除前:
刪除後:
分析如下:(如果每一個儲存格內容都不一樣)採取刪除儲存格內容的方式是比較簡單的方式,那麼如何?多個儲存格的刪除呢?
首先,定義兩個必要的可變的數組,一個是用來儲存初始化未經處理資料的,另一個是用來儲存選中儲存格後,從裡面取出來的資料;
其次,通過資料來源的方法將未經處理資料顯示在表格中,同時通過代理的方法,即選中儲存格的處理,來給選中的儲存格添加指引視圖(標記),並將首先選中的儲存格內容取出存到數組中,(二次選中則將其取消標幟並從數組中刪除);
最後,未經處理資料數組將所有選中的儲存格內容全部刪除,與此同時,資料選中儲存數組也直接清空數組,然後,將表格進行整體重新整理即可。
代碼如下:
1 #import "ViewController.h" 2 #define NUM 20 3 4 @interface ViewController ()<UITableViewDataSource,UITableViewDelegate> 5 @property (weak, nonatomic) IBOutlet UITableView *tableView; 6 @property (strong,nonatomic)NSMutableArray *products; //原始的資料庫存 7 @property (strong,nonatomic)NSMutableArray *productStore; //選中的資料庫存 8 - (IBAction)deleteButtonClicked:(UIBarButtonItem *)sender; 9 10 @end 11 12 @implementation ViewController 13 - (IBAction)deleteButtonClicked:(UIBarButtonItem *)sender 14 { 15 //1.將選中的所有產品從原始庫存中刪除 16 [self.productStore enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 17 [self.products removeObject:obj]; 18 }]; 19 20 //2.清空選中的資料庫存 21 [self.productStore removeAllObjects]; 22 23 //3.整體重新整理表格 24 [self.tableView reloadData]; 25 } 26 - (void)viewDidLoad { 27 [super viewDidLoad]; 28 //初始化 29 self.products = [NSMutableArray arrayWithCapacity:NUM]; 30 self.productStore = [NSMutableArray arrayWithCapacity:NUM]; 31 for(int i=0; i<NUM; i++) 32 { 33 NSString *product = [NSString stringWithFormat:@"product-%02d",i]; 34 [self.products addObject:product]; 35 } 36 37 //設定資料來源和代理 38 self.tableView.dataSource = self; 39 self.tableView.delegate = self; 40 } 41 42 #pragma mark -tableView的資料來源方法 43 //每一個scetion有多少個row 44 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 45 { 46 return self.products.count; 47 } 48 //設定每一個儲存格的內容 49 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 50 { 51 //1.根據reuseIdentifier,先到對象池中去找重用的儲存格對象 52 static NSString *reuseIdentifier = @"productCell"; 53 UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; 54 //2.如果沒有找到,自己建立儲存格對象 55 if(cell == nil) 56 { 57 cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier]; 58 } 59 //3.設定儲存格對象的內容 60 cell.textLabel.text = self.products[indexPath.row]; 61 //設定字型顏色 62 cell.textLabel.textColor = [UIColor redColor]; 63 //設定字型大小 64 cell.textLabel.font = [UIFont systemFontOfSize:20]; 65 //設定儲存格顏色 66 cell.tintColor = [UIColor orangeColor]; 67 68 if([self.productStore containsObject:self.products[indexPath.row]]) //首次選中 69 { 70 //委任標記顯示 71 cell.accessoryType = UITableViewCellAccessoryCheckmark; 72 } 73 else //二次選中 74 { 75 //取消標幟顯示 76 cell.accessoryType = UITableViewCellAccessoryNone; 77 } 78 return cell; 79 } 80 81 #pragma mark -tableView的代理方法 82 //選中儲存格時的處理 83 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 84 { 85 //擷取當前選中的儲存格 86 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 87 88 //取出儲存格中的產品 89 NSString *product = self.products[indexPath.row]; 90 91 //對選中的儲存格添加輔助指引視圖,並將產品儲存到數組中 92 if([self.productStore containsObject:product]) //已經選中過一次 93 { 94 //取消標幟 95 cell.accessoryType = UITableViewCellAccessoryNone; 96 97 //將產品從儲存數組中刪除 98 [self.productStore removeObject:product]; 99 }100 else //首先選中101 {102 //委任標記103 cell.accessoryType = UITableViewCellAccessoryCheckmark;104 105 //將產品添加到儲存數組中106 [self.productStore addObject:product];107 }108 }109 @end
iOS:多個儲存格的刪除(方法二):