UITableView的移动

  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 }
原文地址:https://www.cnblogs.com/leikun1113/p/5541110.html