1 #import "RootViewController.h" 2 #import "RootView.h" 3 @interface RootViewController ()<UITableViewDataSource,UITableViewDelegate> 4 @property (nonatomic, strong) RootView *rootView; 5 // 定义大数组存放所有学生 6 @property (nonatomic, strong) NSMutableArray *allDataArray; 7 @end 8 9 @implementation RootViewController 10 11 - (void)loadView 12 { 13 self.rootView = [[RootView alloc] initWithFrame:[UIScreen mainScreen].bounds]; 14 self.view = self.rootView; 15 } 16 17 - (void)viewDidLoad { 18 [super viewDidLoad]; 19 // Do any additional setup after loading the view. 20 self.rootView.tableView.dataSource = self;// 处理数据源 21 22 self.rootView.tableView.delegate = self;// 处理视图 23 // 设置数据 24 [self handleData]; 25 // 处理NaviGation 26 self.title = @"移动"; 27 self.navigationController.navigationBar.barTintColor = [UIColor cyanColor]; 28 self.navigationController.navigationBar.tintColor = [UIColor whiteColor]; 29 // 添加右按钮 30 self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(rightBarButtonItemClick:)]; 31 32 } 33 34 // 设置数据 35 - (void)handleData 36 { 37 //1.初始化大数组 38 self.allDataArray = [NSMutableArray array]; 39 //2. 定义三个数组分别存放三组学生姓名 40 NSMutableArray *array1 = @[@"小明", @"小py", @"大肘子", @"张飞", @"根哥"].mutableCopy; 41 NSMutableArray *array2 = @[@"高杰", @"宝月", @"周灿", @"傲然"].mutableCopy; 42 NSMutableArray *array3 = @[@"刘洋", @"王志婷", @"小强", @"王志准", @"书凯", @"尹浩"].mutableCopy; 43 // 添加到大数组中 44 [self.allDataArray addObject:array1]; 45 [self.allDataArray addObject:array2]; 46 [self.allDataArray addObject:array3]; 47 48 } 49 50 // 设置分区个数 51 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 52 { 53 return self.allDataArray.count; 54 } 55 56 // 设置每个分区的行数 57 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 58 { 59 return [self.allDataArray[section] count]; 60 } 61 62 // 返回cell对象 63 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 64 { 65 static NSString *identifier = @"cell"; 66 // 1.从重用队列查找可用的cell 67 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 68 // 2,判断如果没有可重用的cell,创建cell对象 69 if (!cell) { 70 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier]; 71 72 } 73 // 3. 设置数据 74 cell.textLabel.text = [self.allDataArray[indexPath.section] objectAtIndex:indexPath.row]; 75 76 // 4. 返回cell对象 77 return cell; 78 79 80 } 81 82 /** 83 * 设置每一行的高度 84 */ 85 86 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 87 { 88 return 70; 89 } 90 91 #pragma mark UItableView 移动----- 92 // 实现右按钮方法 93 - (void)rightBarButtonItemClick:(UIBarButtonItem *)sender 94 { 95 //第一步: 让tableView处于编辑状态 96 [self.rootView.tableView setEditing:!self.rootView.tableView.editing animated:YES]; 97 98 } 99 100 // 第二步: 设置哪些cell可以移动 101 - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath 102 { 103 return YES;// 所有的cell都能一动 104 } 105 106 // 第三步: 开始移动 107 - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath 108 { 109 110 // 1.获取需要修改的数据 111 NSString *sourceName = [self.allDataArray[sourceIndexPath.section] objectAtIndex:sourceIndexPath.row]; 112 113 // 2. 先将数据从当前位置移除 114 [self.allDataArray[sourceIndexPath.section] removeObjectAtIndex:sourceIndexPath.row]; 115 116 // 3. 将数据插入到对应位置 117 [self.allDataArray[destinationIndexPath.section] insertObject:sourceName atIndex:destinationIndexPath.row]; 118 } 119 120 #pragma mark 防止随意移动 121 - (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath 122 { 123 if (sourceIndexPath.section == proposedDestinationIndexPath.section) { 124 return proposedDestinationIndexPath; 125 } else { 126 return sourceIndexPath; 127 } 128 }