標籤:
刪除、插入、移動儲存格的具體執行個體如下:
代碼如下:
1 #import "ViewController.h" 2 #define NUM 20 3 typedef enum 4 { 5 deleteCell, 6 addCell, 7 moveCell, 8 }cellState; 9 @interface ViewController ()<UITableViewDataSource,UITableViewDelegate> 10 @property (weak, nonatomic) IBOutlet UITableView *tableView; 11 @property (strong,nonatomic)NSMutableArray *arrayM; 12 @property (assign,nonatomic)cellState state; //對儲存格要處理的狀態 13 @end 14 15 @implementation ViewController 16 //刪除儲存格 17 - (IBAction)addCellClicked:(UIBarButtonItem *)sender 18 { 19 self.state = addCell; 20 self.tableView.editing = !self.tableView.editing; 21 } 22 //插入儲存格 23 - (IBAction)deleteCellClicked:(UIBarButtonItem *)sender 24 { 25 self.state = deleteCell; 26 self.tableView.editing = !self.tableView.editing; 27 } 28 //移動儲存格 29 - (IBAction)moveCellClicked:(UIBarButtonItem *)sender 30 { 31 self.state = moveCell; 32 self.tableView.editing = !self.tableView.editing; 33 } 34 35 - (void)viewDidLoad { 36 [super viewDidLoad]; 37 38 //初始化 39 self.arrayM = [NSMutableArray arrayWithCapacity:NUM]; 40 for(int i=0; i<NUM; i++) 41 { 42 NSString *productName = [NSString stringWithFormat:@"product-%02d",i+1]; 43 [self.arrayM addObject:productName]; 44 } 45 46 //設定資料來源和代理 47 self.tableView.dataSource = self; 48 self.tableView.delegate = self; 49 } 50 51 #pragma mark -tableView的方法 52 //每一個section有多少個row 53 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 54 { 55 return self.arrayM.count; 56 } 57 //設定每一個儲存格的內容 58 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 59 { 60 //1.根據reuseIdentifier,先到對象池中去找重用的儲存格對象 61 static NSString *reuseIdentifier = @"productCell"; 62 UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; 63 //2.如果沒有找到,自己建立儲存格對象 64 if(cell == nil) 65 { 66 cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier]; 67 } 68 //3.設定儲存格對象的內容 69 cell.textLabel.text = self.arrayM[indexPath.row]; 70 return cell; 71 } 72 73 #pragma mark -tableView的方法 74 //返回儲存格編輯類型 75 -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 76 { 77 if(self.state == deleteCell) 78 { 79 return UITableViewCellEditingStyleDelete; //刪除 80 } 81 else if(self.state == addCell) 82 { 83 return UITableViewCellEditingStyleInsert; //插入 84 } 85 else 86 { 87 return UITableViewCellEditingStyleNone; //移動 88 } 89 } 90 //對儲存格做編輯處理 91 -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 92 { 93 //取出當前的儲存格 94 UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 95 if(cell.editingStyle == UITableViewCellEditingStyleDelete)//刪除儲存格 96 { 97 //1.刪除該儲存格 98 [self.arrayM removeObjectAtIndex:indexPath.row]; 99 //2.局部重新整理表格100 [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationMiddle];101 }102 if(cell.editingStyle == UITableViewCellEditingStyleInsert)//插入儲存格103 {104 //1.建立產品資源105 NSString *product = [NSString stringWithFormat:@"product-%02d",arc4random_uniform(20)];106 107 //2.插入該資料到目前的儲存格108 [self.arrayM insertObject:product atIndex:indexPath.row];109 110 //3.整體重新整理表格111 [self.tableView reloadData];112 }113 }114 //是否可以移動115 -(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath116 {117 if(self.state == deleteCell || self.state == addCell)118 {119 return NO;120 }121 else122 {123 return YES;124 }125 }126 //移動儲存格127 -(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath128 {129 //修改數組中元素的順序130 //取出數組中要移動的元素131 NSString *item = [self.arrayM objectAtIndex:sourceIndexPath.row];132 133 //刪除原來位置的元素134 [self.arrayM removeObjectAtIndex:sourceIndexPath.row];135 136 //在新的位置上重新插入新的元素137 [self.arrayM insertObject:item atIndex:destinationIndexPath.row];138 }139 @end
iOS:刪除、插入、移動儲存格