我想说三点:
1)您想在点击特定行时移动图像,对吗?那你为什么不使用Tableview
委托的方法 - didSelectRowAtIndexPath
。
2)有一种方法UITableView
用于移动行。这是来自Apple文档:
- (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath
将指定位置的行移动到目标位置。
这是将点击的行移动到第 0 行第 0 行的一段代码。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSIndexPath *path = [NSIndexPath indexPathForRow:0 inSection:0];
[tableView beginUpdates];
[tableView moveRowAtIndexPath:path toIndexPath:indexPath];
[tableView moveRowAtIndexPath:indexPath toIndexPath:path];
[tableView endUpdates];
}
3)第三点是主要的。UITableView
默认情况下提供重新排序控件,如果您想通过拖动而不是点击来重新排序行,您可以按照以下步骤实现:
步骤1:
将您的表格视图设置为编辑模式。通常这是通过编辑按钮完成的。
[_yourTableView setEditing:YES animated:YES];
第2步:
在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
分配
cell.showsReorderControl = YES;
第 3 步:
实现UITableViewDataSource
的方法
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath{
// here you do all the reordering in your dataSource Array. Because dragging rows change the index of your row but the change should reflect in yopur array as well.
}
就是这样,您不需要在 beginUpdates 和 endUpdates 块下编写任何代码。你只需要实现这三个步骤。
阅读本文以了解有关重新排序的所有信息TableView