iOS开发_UITableView表格编辑

1、设置表格编辑开关状态

// 设置表格的编辑状态
tableView.editing = YES;

// 翻转表格的编辑状态
tableView.editing = !tableView.editing;

// 带动画翻转表格的编辑状态
[tableView setEditing:!tableView.editing animated:YES];

2、修改左滑删除按钮的内容

// 默认为 Delete
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath {   
	return @"删除";
}

3、设置左滑多按钮

- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewRowAction *action0 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal
                                                                       title:@"关注"
                                                                     handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
        NSLog(@"点击了关注");
        // 收回左滑出现的按钮(退出编辑模式)
        tableView.editing = NO;
    }];

    UITableViewRowAction *action1 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault
                                                                       title:@"删除"
                                                                     handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
        [[myDataArray objectAtIndex:indexPath.section] removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    }];

    // 按钮从右向左的顺序排列
    return @[action1, action0];
}

4、设置编辑模式

/*
UITableViewCellEditingStyleNone;        // 无
UITableViewCellEditingStyleDelete;      // 删除模式,默认
UITableViewCellEditingStyleInsert;      // 插入模式
UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;   // 多选模式
*/
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {

	// 删除、插入、多选删除,不设置默认时为删除
	if (0 == indexPath.section) {
		return UITableViewCellEditingStyleDelete;
	}
	else {
		return UITableViewCellEditingStyleInsert;
	}
}

5、表格删除、插入

  • 5.1 表格删除:

    • ① 先将数据从数据源里删除,
    • ② 刷新显示
    • 再从 tableView 里删除 cell:
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    
    • 或者再直接重载整个表格:
    [tableView reloadData];
    
    • 或者在直接重载分段:
    [tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationAutomatic];
    
  • 5.2 表格插入:

    • ① 先将数据插入到数据源中,
    • ② 刷新显示
      • 再插入一个 cell:
      [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
      
      • 或者再直接重载整个表格:
      [tableView reloadData];
      
      • 或者在直接重载分段:
      [tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationAutomatic];
      
    • ③ 实际代码
    // 表格删除或插入,默认为删除模式,写入该方法即表示允许删除
    - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    
    	// 判断编辑风格,默认是删除
    	if (editingStyle == UITableViewCellEditingStyleDelete) {
    
    			// 表格删除
    			// 从数据源里删除
    			[[myDataArray objectAtIndex:indexPath.section] removeObjectAtIndex:indexPath.row];
    
    			// 从 tableView 里删除 cell
    			[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; 
    	}
    	else if (editingStyle == UITableViewCellEditingStyleInsert) {
    
    		Person *person = [[Person alloc] init];                 
    		person.name = @"xiao bai";
    		person.age = 18;
    
    		// 表格插入
    		// 插入到数据源中
    		[[myDataArray objectAtIndex:indexPath.section] insertObject:person atIndex:indexPath.row];
    
    		// 插入一个 cell
    		[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    	}
    }
    

6、表格移动

  • 6.1 原理介绍

    • ① 先在数据源中找到需要移动的对象。
    • ② 然后在数据源数组中从原始位置删掉。
    • ③ 再在数据源数组中插入到新位置。
    • ④ 最后重新加载表格:
    [tableView reloadData];
    
    • 或者在直接重载分段:
    [tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationAutomatic];
    
  • 6.2 实际代码

// 写入该方法即表示允许移动
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {

	// 找到需要移动的对象
	Person *person = [[myDataArray objectAtIndex:sourceIndexPath.section] objectAtIndex:sourceIndexPath.row];

	// 从原始位置删掉
	[[myDataArray objectAtIndex:sourceIndexPath.section] removeObjectAtIndex:sourceIndexPath.row];

	// 插入到新位置
	[[myDataArray objectAtIndex:destinationIndexPath.section] insertObject:person atIndex:destinationIndexPath.row];

	// 刷新 tableView
	[tableView reloadData];
}
posted @ 2018-08-05 12:50  CH520  阅读(271)  评论(0编辑  收藏  举报