假设一个tableView如下所示
1557985592713.jpg
我们想将某一行移动到任意一行,该怎么做呢?其实很简单。
1.首先设置
//让table进入编辑模式。你可以通过一个按钮来控制进入还是退出编辑模式
[self.tableView setEditing:YES];
2.其次设置
//让table支持移动
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
3.然后设置
//移动某行至某行
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
[self.array exchangeObjectAtIndex:fromIndexPath.row withObjectAtIndex:toIndexPath.row];
}
完整代码如下
#import "ViewController.h"
@interface ViewController ()<UITableViewDelegate , UITableViewDataSource>
@property (nonatomic , strong) UITableView *tableView;
@property (nonatomic , strong) NSMutableArray *array;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView = [[UITableView alloc]initWithFrame:self.view.bounds];
self.tableView.delegate = self;
self.tableView.dataSource = self;
self.tableView.rowHeight = 60;
[self.view addSubview:self.tableView];
self.array = [NSMutableArray arrayWithObjects:@1,@2,@3,@4,@5,nil];
//让table进入编辑模式。你可以通过一个按钮来控制进入还是退出编辑模式
[self.tableView setEditing:YES];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.array.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
cell.textLabel.text = [self.array[indexPath.row] stringValue];
return cell;
}
//屏蔽系统删除模式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewCellEditingStyleNone;
}
//让table支持移动
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
//移动某行至某行
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
[self.array exchangeObjectAtIndex:fromIndexPath.row withObjectAtIndex:toIndexPath.row];
}
@end
实现上面代码即可实现任意一行的cell拖动,如下图,点击红色圈圈里出来的按钮,即可拖动
1557985246968.jpg
网友评论