UITableView编辑

编辑

编辑步骤:
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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值