28.UITableView表视图第三章(移动和编辑删除和添加)

编辑步骤:

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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值