删除、插入、移动单元格的具体实例如下:

iOS:删除、插入、移动单元格-LMLPHP iOS:删除、插入、移动单元格-LMLPHPiOS:删除、插入、移动单元格-LMLPHPiOS:删除、插入、移动单元格-LMLPHP

代码如下:

 #import "ViewController.h"
#define NUM 20
typedef enum
{
deleteCell,
addCell,
moveCell,
}cellState;
@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (strong,nonatomic)NSMutableArray *arrayM;
@property (assign,nonatomic)cellState state; //对单元格要处理的状态
@end @implementation ViewController
//删除单元格
- (IBAction)addCellClicked:(UIBarButtonItem *)sender
{
self.state = addCell;
self.tableView.editing = !self.tableView.editing;
}
//插入单元格
- (IBAction)deleteCellClicked:(UIBarButtonItem *)sender
{
self.state = deleteCell;
self.tableView.editing = !self.tableView.editing;
}
//移动单元格
- (IBAction)moveCellClicked:(UIBarButtonItem *)sender
{
self.state = moveCell;
self.tableView.editing = !self.tableView.editing;
} - (void)viewDidLoad {
[super viewDidLoad]; //初始化
self.arrayM = [NSMutableArray arrayWithCapacity:NUM];
for(int i=; i<NUM; i++)
{
NSString *productName = [NSString stringWithFormat:@"product-%02d",i+];
[self.arrayM addObject:productName];
} //设置数据源和代理
self.tableView.dataSource = self;
self.tableView.delegate = self;
} #pragma mark -tableView的方法
//每一个section有多少个row
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.arrayM.count;
}
//设置每一个单元格的内容
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//1.根据reuseIdentifier,先到对象池中去找重用的单元格对象
static NSString *reuseIdentifier = @"productCell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
//2.如果没有找到,自己创建单元格对象
if(cell == nil)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
}
//3.设置单元格对象的内容
cell.textLabel.text = self.arrayM[indexPath.row];
return cell;
} #pragma mark -tableView的方法
//返回单元格编辑类型
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(self.state == deleteCell)
{
return UITableViewCellEditingStyleDelete; //删除
}
else if(self.state == addCell)
{
return UITableViewCellEditingStyleInsert; //插入
}
else
{
return UITableViewCellEditingStyleNone; //移动
}
}
//对单元格做编辑处理
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
//取出当前的单元格
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
if(cell.editingStyle == UITableViewCellEditingStyleDelete)//删除单元格
{
//1.删除该单元格
[self.arrayM removeObjectAtIndex:indexPath.row];
//2.局部刷新表格
[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationMiddle];
}
if(cell.editingStyle == UITableViewCellEditingStyleInsert)//插入单元格
{
//1.创建产品资源
NSString *product = [NSString stringWithFormat:@"product-%02d",arc4random_uniform()]; //2.插入该数据到当前单元格
[self.arrayM insertObject:product atIndex:indexPath.row]; //3.整体刷新表格
[self.tableView reloadData];
}
}
//是否可以移动
-(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
if(self.state == deleteCell || self.state == addCell)
{
return NO;
}
else
{
return YES;
}
}
//移动单元格
-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
//修改数组中元素的顺序
//取出数组中要移动的元素
NSString *item = [self.arrayM objectAtIndex:sourceIndexPath.row]; //删除原来位置的元素
[self.arrayM removeObjectAtIndex:sourceIndexPath.row]; //在新的位置上重新插入新的元素
[self.arrayM insertObject:item atIndex:destinationIndexPath.row];
}
@end
05-11 22:15