编辑步骤:
1.开启TableView编辑状态
2.允许哪个分区的那行 是可以编辑的(默认都能编辑)
3.指定可以编辑样式 (删除 or 添加)
4.完成编辑(提交编辑)
完成编辑步骤:
1.操作数据源数组(添加 或删除)
2.刷新UI界面
实现点击编辑按钮时触发 步骤1:开启编辑状态
- (void)barButtonItemClick:(UIBarButtonItem *)buttonTtem
{
步骤1:开启编辑状态
[self.tableView setEditing:!self.tableView.editing animated:YES];
编辑时更改标题
if (self.tableView.editing == YES) {

buttonTtem.title = @”完成”;
}else{

buttonTtem.title = @”编辑”;
}
}
步骤2 允许哪个分区的那行 是可以编辑的(默认都能编辑)
- (BOOL)tableView:(UITableView )tableView canEditRowAtIndexPath:(NSIndexPath )indexPath
{

可以利用indexPath 控制哪个分区的哪行 不能编辑
return YES;
}
步骤3指定编辑的样式
- (UITableViewCellEditingStyle)tableView:(UITableView )tableView editingStyleForRowAtIndexPath:(NSIndexPath )indexPath
{

返回编辑样式
if (indexPath.section == 0) {

分区1
if ([self.firstArray[indexPath.row]isEqualToString:@”添加”]) {

return UITableViewCellEditingStyleInsert;
}
}else{

分区2
if ([self.secondArray[indexPath.row]isEqualToString:@”添加”]) {

return UITableViewCellEditingStyleInsert;
}
}
return UITableViewCellEditingStyleDelete;
}
步骤4.提交编辑
根据编辑的样式 和索引 去完成编辑
- (void)tableView:(UITableView )tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath )indexPath
{

if (indexPath.section == 0) {

分区1
if (editingStyle == UITableViewCellEditingStyleDelete) {

删除
先删除数据
[self.firstArray removeObjectAtIndex:indexPath.row];
删除的刷新方法
该方法可以进行多行删除 数组中填写所有已经删除的索引
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
//刷新页面
//整体刷新(UITableView) 重新走一遍数据源代理方法 达到刷新页面的效果
// [tableView reloadData];
}else{

添加数据
先操作数据
[self.firstArray insertObject:@”123” atIndex:indexPath.row];
添加刷新页面
[tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:(UITableViewRowAnimationLeft)];
}
}else{

分区2
if (editingStyle == UITableViewCellEditingStyleDelete) {

删除
先删除数据
[self.secondArray removeObjectAtIndex:indexPath.row];
删除刷新
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
}else{

添加数据
先操作数据
[self.secondArray insertObject:@”123” atIndex:indexPath.row];
添加刷新
[tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:(UITableViewRowAnimationLeft)];
}
}
}
=============================================
移动的步骤:
1.开启编辑状态(跟上面一样,就不写了)
2.允许哪个分区的哪一行 可以移动
3.完成移动(1.操作数组源数组 2.刷新UI界面)
2.允许哪个分区的哪一行 可以移动
- (BOOL)tableView:(UITableView )tableView canMoveRowAtIndexPath:(NSIndexPath )indexPath
{

return YES;
}
3.完成移动(1.操作数组源数组 2.刷新UI界面)
- (void)tableView:(UITableView )tableView moveRowAtIndexPath:(NSIndexPath )sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{

sourceIndexPath 来源的索引
destinationIndexPath 目的地的索引
移动的分类 同分区 和 跨分区移动
1.判断是否同区移动
if (sourceIndexPath.section == destinationIndexPath.section) {

来自同区
判断是哪一个区
if (sourceIndexPath.section == 0) {

操作firstArray
把来源索引下 数组对应的元素 保存一下
NSString *str = self.firstArray[sourceIndexPath.row];
用来源的索引 删除数组中对应元素
[self.firstArray removeObjectAtIndex:sourceIndexPath.row];
插入到移动的目的地索引
[self.firstArray insertObject:str atIndex:destinationIndexPath.row];
移动刷新方法
[tableView moveRowAtIndexPath:sourceIndexPath toIndexPath:destinationIndexPath];
}else{

操作seconArray
把来源索引下 数组对应的元素 保存一下
NSString *str = self.secondArray[sourceIndexPath.row];
用来源的索引 删除数组中对应元素
[self.secondArray removeObjectAtIndex:sourceIndexPath.row];
插入到目的地的索引
[self.secondArray insertObject:str atIndex:destinationIndexPath.row];
[tableView moveRowAtIndexPath:sourceIndexPath toIndexPath:destinationIndexPath];
}
}else{

跨区
}
步骤4.限制跨区移动(一般是限制跨区移动的)
- (NSIndexPath )tableView:(UITableView )tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath )sourceIndexPath toProposedIndexPath:(NSIndexPath )proposedDestinationIndexPath
{

sourceIndexPath 来源索引
proposedDestinationIndexPath 建议的目的地索引
if (sourceIndexPath.section == proposedDestinationIndexPath.section) {

同区移动 可以返回 目的地索引
return proposedDestinationIndexPath;
}else{

跨区移动 需要限制 (从哪里来 还回哪里去)
return sourceIndexPath;
}
}