IOSUITableView拖动排序功能
  UITbableView作为列表展⽰信息。除了展⽰的功能,有时还会⽤到删除。排序等功能。以下就来解说⼀下怎样实现排序。
  排序是当表格进⼊编辑状态后,在单元格的右側会出现⼀个button。点击button,就能够拖动单元格。移动位置。进⾏⼿动排序。
使⽤系统⾃带拖动排序功能的步骤:
1、让tableView进⼊编辑状态,也就是设置它的editing为YES
2、返回编辑模式,也就是实现UITableViewDelegate中的tableview:editingStyleForRowAtIndexPath:⽅法,在⾥⾯返回
UITableViewCellEditingStyleNone模式。
假设不实现,默认返回的就是删除模式
3、实现tableView:moveRowAtIndexPath:toIndexPath⽅法,仅仅要实现该⽅法,就能实现单元格的拖动排序。但仅仅是实现了表⾯的排序,并没
有改动真实地数据
4、在⽅法中完毕数据模型的更新
代码:
//  ViewController.m
ios 字符串转数组
//  JRTableView删除
//
//  Created by jerehedu on 15/6/11.
//  Copyright (c) 2015年 jerehedu. All rights reserved.
//
#import "ViewController.h"
#import "Goods.h"
@interface ViewController ()<UITableViewDataSource, UITableViewDelegate>
{
UITableView *_tableView; //列表
NSMutableArray *_goodsAry; //商品数组
UIButton *_editBtn; //编辑button
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//加⼊标题
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, 44)];
< = @"购物车";
titleLabel.backgroundColor = [UIColor redColor];
[self.view addSubview:titleLabel];
//加⼊编辑button
_editBtn = [UIButton buttonWithType:UIButtonTypeCustom];
_editBtn.frame = CGRectMake(self.view.frame.size.width-60, 25, 50, 34);
[_editBtn setTitle:@"编辑" forState:UIControlStateNormal];
[_editBtn setTitle:@"完毕" forState:UIControlStateSelected];
_editBtn.titleLabel.font = [UIFont systemFontOfSize:15];
_editBtn.backgroundColor = [UIColor colorWithRed:0.8 green:0.8 blue:0.8 alpha:0.5];
[self.view addSubview:_editBtn];
[_editBtn addTarget:self action:@selector(clickEditBtn:) forControlEvents:UIControlEventTouchUpInside];
//加⼊tableview
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height-64)];
_tableView.dataSource = self;
_tableView.delegate = self;
[self.view addSubview:_tableView];
//取数据
NSArray *ary = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"ShoppingGoodsList" ofType:@"plist"]];
//把数据存到模型对象中,然后把对象存到数组中
_goodsAry = [NSMutableArray array];
for (int i=0; i&unt; i++) {
Goods *good = [Goods goodsWithDic:ary[i]];
[_goodsAry addObject:good];
}
}
#pragma mark 数据源返回有⼏⾏
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _unt;
}
#pragma mark 每⾏显⽰内容
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *idGood = @"goods";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:idGood];
if (cell==nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:idGood];
}
Goods *good = _w];
cell.imageView.image = [UIImage imageNamed:good.icon];
< = good.name;
= good.details;
cell.detailTextLabel.numberOfLines = 6;
Color = [UIColor brownColor];
return cell;
}
#pragma mark 选中⾏
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// 取消选中状态
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
#pragma mark 设置⾏⾼
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 110;
}
#pragma mark 点击编辑button
- (IBAction)clickEditBtn:(UIButton *)sender {
//设置tableview编辑状态
BOOL flag = !_tableView.editing;
[_tableView setEditing:flag animated:YES];
_editBtn.selected = flag;
}
#pragma mark 选择编辑模式,加⼊模式⾮常少⽤,默认是删除
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleNone;
}
#pragma mark 排序当移动了某⼀⾏时候会调⽤
//编辑状态下。仅仅要实现这种⽅法,就能实现拖动排序
-
(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {
// 取出要拖动的模型数据
Goods *goods = _w];
//删除之前⾏的数据
[_goodsAry removeObject:goods];
// 插⼊数据到新的位置
[_goodsAry insertObject:goods w];
}
@end
  想要了解很多其它内容的⼩伙伴。能够点击,亲⾃执⾏測试。
  疑问咨询或技术交流,请增加官⽅QQ:(452379712)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。