@产品

iOS 几行代码实现tableView的重排(重新排序)

2019-05-16  本文已影响4人  陈盼同学

假设一个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
上一篇下一篇

猜你喜欢

热点阅读