您的位置:首页 > 产品设计 > UI/UE

UITableView编辑

2015-11-23 22:57 344 查看

编辑

编辑步骤:

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: