1 // 2 // HMViewController.m 3 // 06-表格的修改 4 // 5 // Created by apple on 14-8-19. 6 // Copyright (c) 2014年 itcast. All rights reserved. 7 // 8 9 #import "HMViewController.h" 10 11 @interface HMViewController () <UITableViewDataSource, UITableViewDelegate> 12 /** 数据列表 */ 13 @property (nonatomic, strong) NSMutableArray *dataList; 14 @property (nonatomic, strong) UITableView *tableView; 15 @end 16 17 @implementation HMViewController 18 19 - (UITableView *)tableView 20 { 21 if (_tableView == nil) { 22 _tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; 23 24 _tableView.dataSource = self; 25 _tableView.delegate = self; 26 27 [self.view addSubview:_tableView]; 28 } 29 return _tableView; 30 } 31 32 - (NSMutableArray *)dataList 33 { 34 if (_dataList == nil) { 35 _dataList = [NSMutableArray arrayWithObjects:@"zhangsan", @"lisi", @"wangwu", @"zhangsan", @"lisi", @"wangwu", @"zhangsan", @"lisi", @"wangwu", @"zhangsan", @"lisi", @"wangwu", @"zhangsan", @"lisi", @"wangwu", @"zhangsan", @"lisi", @"wangwu", @"zhangsan", @"lisi", @"wangwu", @"zhangsan", @"lisi", @"wangwuwangwuwangwuwangwuwangwu", nil]; 36 } 37 return _dataList; 38 } 39 40 - (void)viewDidLoad 41 { 42 [super viewDidLoad]; 43 44 [self tableView]; 45 46 // 开始编辑,一旦editing == YES就默认开启删除模式 47 self.tableView.editing = YES; 48 } 49 50 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 51 { 52 return self.dataList.count; 53 } 54 55 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 56 { 57 static NSString *ID = @"Cell"; 58 59 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; 60 61 if (cell == nil) { 62 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID]; 63 } 64 65 // 设置表格 66 cell.textLabel.text = self.dataList[indexPath.row]; 67 68 return cell; 69 } 70 71 // 只要实现了此方法,就能够支持手势拖拽删除了,删除需要自己干! 72 /** 73 UITableViewCellEditingStyleNone, 74 UITableViewCellEditingStyleDelete, 删除 75 UITableViewCellEditingStyleInsert 添加 76 */ 77 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 78 { 79 if (editingStyle == UITableViewCellEditingStyleDelete) { 80 NSLog(@"要删除"); 81 82 // MVC => 数据是保存在模型中 83 // 1. 删除self.dataList中indexPath对应的数据 84 [self.dataList removeObjectAtIndex:indexPath.row]; 85 NSLog(@"%@", self.dataList); 86 87 // 2. 刷新表格(重新加载数据) 88 // 重新加载所有数据 89 // [self.tableView reloadData]; 90 // deleteRowsAtIndexPaths让表格控件动画删除指定的行 91 [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationMiddle]; 92 } else if (editingStyle == UITableViewCellEditingStyleInsert) { 93 NSLog(@"要添加数据"); 94 95 // 1. 向数组添加数据 96 [self.dataList insertObject:@"王小二" atIndex:indexPath.row + 1]; 97 // 2. 刷新表格 98 // [self.tableView reloadData]; 99 // insertRowsAtIndexPaths让表格控件动画在指定indexPath添加指定行 100 // 新建一个indexPath 101 NSIndexPath *path = [NSIndexPath indexPathForRow:indexPath.row + 1 inSection:indexPath.section]; 102 103 [self.tableView insertRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationMiddle]; 104 } 105 } 106 107 // 只要实现此方法,就可以显示拖动控件 108 - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath 109 { 110 // 界面数据UITableView已经完成了 111 // 调整数据即可 112 // [self.dataList exchangeObjectAtIndex:sourceIndexPath.row withObjectAtIndex:destinationIndexPath.row]; 113 // 1. 将源从数组中取出 114 id source = self.dataList[sourceIndexPath.row]; 115 // 2. 将源从数组中删除 116 [self.dataList removeObjectAtIndex:sourceIndexPath.row]; 117 NSLog(@"%@", self.dataList); 118 119 // 3. 将源插入到数组中的目标位置 120 [self.dataList insertObject:source atIndex:destinationIndexPath.row]; 121 122 NSLog(@"%@", self.dataList); 123 } 124 125 #pragma mark - 代理方法 126 // 返回编辑样式,如果没有实现此方法,默认都是删除 127 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 128 { 129 // if (indexPath.row % 2) { 130 // return UITableViewCellEditingStyleInsert; 131 // } else { 132 // return UITableViewCellEditingStyleDelete; 133 // } 134 return UITableViewCellEditingStyleInsert; 135 } 136 137 @end