美文网首页@产品
iOS 几行代码实现tableView的重排(重新排序)

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

作者: 陈盼同学 | 来源:发表于2019-05-16 13:54 被阅读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

    相关文章

      网友评论

        本文标题:iOS 几行代码实现tableView的重排(重新排序)

        本文链接:https://www.haomeiwen.com/subject/zyciaqtx.html