我用
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath
toIndexPath:(NSIndexPath *)destinationIndexPath{
}
在部分内和部分之间拖放行的方法。我也可以用部分执行拖动吗?
答案 0 :(得分:2)
从概念上(以及技术上)可能更简单地将一个级别退回到表视图,其中每一行对应于要重新排序的表的各个部分。也许你可以通过“重新订购部分”按钮来调用它,显示section-table-view,重新排序,然后在详细信息表视图上强制重新排序。 我想如果你试图在一张桌子里做这一切,你就会让自己和用户感到沮丧。我的2美分。 -Mike
答案 1 :(得分:1)
老问题,我知道,但我刚刚实现了自己做的事情,所以我想分享答案,以防其他人偶然发现这一点。
我的基本方法是在每个部分的顶部添加一个代表该部分的行。我还在每个部分的末尾添加了一个“添加新部分”行,其编辑样式为UITableViewCellEditingStyleInsert
,以允许直接在视图中创建新部分。因此,对于每个部分,行如下:
(我有几种简单的方法可以在“编辑模式indexPath”和“真实数据indexPath”之间进行转换。)
对于移动部分,在UITableViewDelegate Protocol
方法tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath:
中检查建议的移动,以确保部分行已“移动得足够远”(在另一部分行的上方或下方)。返回的indexPath被剪切到最近的部分行的上方或下方(取决于是向上还是向下移动),以便向用户显示它将被移动的位置。
在tableView:moveRowAtIndexPath:toIndexPath:
中,在数据源中进行了部分更改,然后将reloadData
消息发送到tableView以显示更改。使用reloadData
代替moveSection:toSection:
,因为对于后者,由于行移动,数据源和显示将不同步,并会导致异常。