UITableView在iOS开发中用处很广,当然其用法也是有些复杂的,特别是在设计UITableViewCell的时候,使用和处理cell是一个不小的挑战,对于cell位置的移动我们可以使用- (void)tableView:(UITableView )tableView moveRowAtIndexPath:(NSIndexPath )sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath方法来做到,移动cell的方式无非就是在同一个section之间的移动和在不同的section之间移动,但是cell的位置改变是一个难点,我做了一个小demo,总结了一些经验,解决了这两个问题。
1、同一个section之间cell位置的移动
点击section2的一个cell之后,这个cell移动到这个section的顶部位置,而原来的第一条cell则按顺序移动到第二位,代码如下:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//取消cell被点击时出现的背景阴影
[tableView deselectRowAtIndexPath:indexPath animated:YES];
//sourceIndexPath是被点击cell的IndexPath
NSIndexPath *sourceIndexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:1];
//destinationIndexPath是section2顶部第一条cell的位置
NSIndexPath *destinationIndexPath = [NSIndexPath indexPathForRow:0 inSection:1];
//获取被点击cell对应的数据
NSString *str1 = [dataListSecond objectAtIndex:indexPath.row];
//对数据源进行操作,修改数据源
[dataListSecond removeObject:str1];
[dataListSecond insertObject:str1 atIndex:0];
//移动cell的位置
[myTable moveRowAtIndexPath:sourceIndexPath toIndexPath:destinationIndexPath];
}
效果如图:
2、在不同section之间移动cell
跨section移动cell,section1中的cell始终只有一条,点击section2中的任意一条cell,移动这条cell至section1,而section1中原来的cell被移动到section2中顶部cell的位置,代码如下
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
//sourceIndexPath是section2中被点击cell的IndexPath
NSIndexPath *sourceIndexPath = [NSIndexPath indexPathForRow:indexPath.row