编辑
编辑步骤:
1. 开启TableView编辑状态
2. 允许哪个分区或者哪个分区的哪行是可以编辑的(默认 都能编辑)
3. 指定可以编辑样式(删除 添加)
4. 完成编辑(提交编辑)
完成编辑步骤:
1. 操作数据源数组 (添加 或 删除)
2. 刷新UI界面
删除和添加
// 添加编辑按钮
- (void)addBarButtonItem
{
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithTitle:@"编辑" style:UIBarButtonItemStylePlain target:self action:@selector(buttonItemAction:)];
self.navigationItem.rightBarButtonItem = buttonItem;
[buttonItem release];
}
// 点击方法
- (void)buttonItemAction:(UIBarButtonItem *)buttonItem
{
// 1. 开启编辑状态
[self.tableView setEditing:!self.tableView.editing animated:YES];
// 编辑时更改标题
if (self.tableView.editing == YES) {
buttonItem.title = @"完成";
}else{
buttonItem.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{
// 分区
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];
// 刷新页面
// 整体刷新(UITableView) 重新走一遍数据源代理方法 达到刷新页面的效果
// [tableView reloadData];
// 删除刷新
// 该方法可以进行多行删除 数组填写所有已经删除的索引
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}else{
// 添加
if (editingStyle == UITableViewCellEditingStyleInsert) {
[self.firstArray insertObject:@"123" atIndex:indexPath.row];
[tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
}else{
// 分区2
if (editingStyle == UITableViewCellEditingStyleDelete) {
[self.secondArray removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}else{
if (editingStyle == UITableViewCellEditingStyleInsert) {
[self.secondArray insertObject:@"123" atIndex:indexPath.row];
[tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
}
}
移动
移动步骤:
1. 开启编辑状态
2. 允许哪个分区的哪一行 可以移动
3. 完成移动 (1.操作数据源数组 2.刷新UI界面)
// 允许移动
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
// sourceIndexPath 来源的索引
// destinationIndexPath 目的地的索引
if (sourceIndexPath.section == destinationIndexPath.section) {
if (sourceIndexPath.section == 0) {
// 把来源索引下 数组对应的元素 保存一下
NSString *str = self.firstArray[sourceIndexPath.row];
// 用来源的索引 删除数组中的对应元素
[self.firstArray removeObject:str];
// 插入到移动的目的地索引处
[self.firstArray insertObject:str atIndex:destinationIndexPath.row];
}
if (sourceIndexPath.section == 1) {
NSString *str = self.secondArray[sourceIndexPath.row];
[self.secondArray removeObject:str];
[self.secondArray insertObject:str atIndex:destinationIndexPath.row];
}
}
[tableView moveRowAtIndexPath:sourceIndexPath toIndexPath:destinationIndexPath];
}
// 限制跨区移动
- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath
{
//proposedDestinationIndexPath 建议的目的地索引
if (sourceIndexPath.section == proposedDestinationIndexPath.section) {
// 同区移动 可以返回 目的地的索引
return proposedDestinationIndexPath;
}else{
// 跨区移动 需要限制(从哪里来 回哪里去)
return sourceIndexPath;
}
}