UITableView 的三种编辑模式

1、删除

2、排序

3、添加

进入编辑模式,需要设置一个参数

 - (IBAction)remove:(UIBarButtonItem *)sender
{
NSLog(@"removed");
// 进入编辑模式
BOOL removed = !self.tableView.isEditing; //获取当前状态进行取反
[self.tableView setEditing:removed animated:YES]; //设置编辑模式,并设置动画
}

IOS开发学习笔记032-UITableView 的编辑模式-LMLPHP

1、实现界面

界面组成为两个lable标签,新建一个模型类Person保存数据,直接使用默认UITableViewCell默认的cell,设置textLable控件和detailLable控件,然后设置显示样式为 UITableViewCellStyleValue1,

两个标签并排显示。至于怎么初始化显示,我这里就不说了,可以看以往的文章。

2、删除

响应删除按钮需要实现一个方法 commitEditingStyle

 // 进入编辑模式,点击删除会调用这个方法,实现这个方法就可以出现向左滑动出现删除按钮
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
// 如果不是删除模式就退出
if (editingStyle != UITableViewCellEditingStyleDelete) {
return;
}
// 1、获取cell
Person *p = _data[indexPath.row];
// 2、删除cell
[_data removeObject:p];
// 3、更新cell
//reloadRowsAtIndexPaths 使用前提就是模型数据没有改变
//[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft]; // 模型对象数据内容改变,可以用这个
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft]; // 模型对象个数改变,用这个方法 }

3、排序

 // 编辑模式下得排序功能
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
// 1、获得拖动对象
Person *p = _data[sourceIndexPath.row];
// 2、删除拖动对象
[_data removeObject:p];
// 3、插入拖动对象到最新位置
[_data insertObject:p atIndex:destinationIndexPath.row];

4、添加

添加的话,可能有点麻烦,主要是把单击添加按钮的这个消息传递当方法 editingStyleForRowAtIndexPath

这里使用设置addBtn按钮的tag来标识按钮是否按下,默认是0,按下设置为2。

按钮按下时设置tag

 - (IBAction)add:(UIBarButtonItem *)sender
{
// 进入编辑模式
//isAdd = YES;
_addBtn.tag = ; // 设置按钮tag为2
BOOL added = !self.tableView.isEditing;
[self.tableView setEditing:added animated:YES]; // 设置为编辑模式
}

设置显示样式

 // 设置每一行的样式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(_addBtn.tag == ) // 添加按钮是否按下
return UITableViewCellEditingStyleInsert; // 添加
else if(_addBtn.tag == )
return UITableViewCellEditingStyleDelete; // 删除
else
return UITableViewCellEditingStyleNone; // 默认
}

添加cell

 // 进入编辑模式,点击删除会调用这个方法,实现这个方法就可以出现向左滑动出现删除按钮
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"editingStyle");
// 如果是删除模式
if (editingStyle == UITableViewCellEditingStyleDelete)
{
// 1、获取cell
Person *p = _data[indexPath.row];
// 2、删除cell
[_data removeObject:p];
// 3、更新cell
//reloadRowsAtIndexPaths 使用前提就是模型数据没有改变
//[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft]; // 模型对象数据内容改变,可以用这个
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft]; // 模型对象个数改变,用这个方法 }
// 如果是添加模式
else if(editingStyle == UITableViewCellEditingStyleInsert)
{
NSLog(@"insert");
// 1、获取cell
Person *p = [Person personWithName:@"personAdd" andPhone:@""];
// 2、插入cell
[_data insertObject:p atIndex:indexPath.row + ];
// 3、更新cell
[tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
[tableView reloadData];
} }

源代码

 //
// ViewController.m
// UITableView-编辑模式
//
// Created by Christian on 15/5/26.
// Copyright (c) 2015年 slq. All rights reserved.
// #import "ViewController.h"
#import "Person.h" @interface ViewController () <UITableViewDataSource> {
NSMutableArray *_data;
}
@end @implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// 初始化
_data = [NSMutableArray array];
for (int i = ; i < ; i ++)
{
Person *p = [[Person alloc] init];
p.name = [NSString stringWithFormat:@"person-%d",i];
p.phone = [NSString stringWithFormat:@"%d2389823",i];
[_data addObject:p];
}
_addBtn.tag = ;
} - (IBAction)remove:(UIBarButtonItem *)sender
{
// 进入编辑模式
_addBtn.tag = ; // 设置添加按钮tag为0
BOOL removed = !self.tableView.isEditing;
[self.tableView setEditing:removed animated:YES]; } - (IBAction)add:(UIBarButtonItem *)sender
{
// 进入编辑模式
_addBtn.tag = ; // 设置按钮tag为2
BOOL added = !self.tableView.isEditing;
[self.tableView setEditing:added animated:YES];
} - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _data.count;
} - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// 从缓存池中读取cell
static NSString *ID = @"Person";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
// 如果缓存池中没有,就新建一个
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ID];
}
// 设置cell数据
Person *p = _data[indexPath.row];
cell.textLabel.text = p.name;
cell.detailTextLabel.text = p.phone;
return cell;
} // 进入编辑模式,点击删除会调用这个方法,实现这个方法就可以出现向左滑动出现删除按钮
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"editingStyle");
// 如果是删除模式
if (editingStyle == UITableViewCellEditingStyleDelete)
{
// 1、获取cell
Person *p = _data[indexPath.row];
// 2、删除cell
[_data removeObject:p];
// 3、更新cell
//reloadRowsAtIndexPaths 使用前提就是模型数据没有改变
//[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft]; // 模型对象数据内容改变,可以用这个
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft]; // 模型对象个数改变,用这个方法 }
// 如果是添加模式
else if(editingStyle == UITableViewCellEditingStyleInsert)
{
NSLog(@"insert");
// 1、获取cell
Person *p = [Person personWithName:@"personAdd" andPhone:@""];
// 2、插入cell
[_data insertObject:p atIndex:indexPath.row + ];
// 3、更新cell
[tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
[tableView reloadData];
} } // 编辑模式下得排序功能
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
// 1、获得拖动对象
Person *p = _data[sourceIndexPath.row];
// 2、删除拖动对象
[_data removeObject:p];
// 3、插入拖动对象到最新位置
[_data insertObject:p atIndex:destinationIndexPath.row];
}
// 设置每一行的样式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(_addBtn.tag == ) // 添加按钮是否按下
return UITableViewCellEditingStyleInsert; // 添加
else if(_addBtn.tag == )
return UITableViewCellEditingStyleDelete; // 删除
else
return UITableViewCellEditingStyleNone; // 默认
} @end

源代码参考: http://pan.baidu.com/s/1rZgGu

05-11 15:18