我可以用table来拖动tableview中的部分吗?

问题描述:

我使用的内和跨段拖放行我可以用table来拖动tableview中的部分吗?

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath 
    toIndexPath:(NSIndexPath *)destinationIndexPath{ 
} 

方法。我是否也可以用节来执行拖动操作?

+0

你有这样的特殊需求吗? – Ravin 2011-04-14 12:57:13

+0

是的,我愿意..这会让我的应用用户的生活变得更轻松.. – neha 2011-04-14 14:22:52

它可能在概念上(以及在技术上)更简单地将级别退回到表视图,其中每行对应于要重新排序的表的部分。也许你可以使用“重新排序部分”按钮来调用它,显示部分表视图,重新排序,然后在细节表视图上强加重新排序。 我认为如果您尝试在单个表格内完成所有操作,那么您将会挫败自己和用户。我的2美分。 -Mike

老问题,我知道,但我只是实现了一些自己做的事情,所以我想分享答案,以防止其他人偶然发现这一点。

我的基本方法是在每个部分的顶部添加一行代表部分。我还在每节的末尾添加了编辑样式为UITableViewCellEditingStyleInsert的“添加新节”行,以允许直接在视图内创建新节。所以,对于每一个部分的行是这样的:

  • 行0 =第行(在视觉上通过设置不同的 背景颜色分辨)
  • 排数1至x =正常数据行
  • 排x + 1 = “新增加一节”

(我有几个简单的方法,以“编辑模式indexPath”和“真实数据indexPath”之间的转换。)

对于移动部分,在p在UITableViewDelegate Protocol方法tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath:中检查删除的移动以确保该部分行移动得“足够远”(在另一部分行的上方或下方)。返回的indexPath被剪切到刚好在最接近的部分行的上方或下方(取决于向上还是向下移动),以向用户指示它将被移动的位置。

tableView:moveRowAtIndexPath:toIndexPath:段更改在数据源中,然后reloadData消息发送到tableView以显示更改。使用reloadData而不是moveSection:toSection:,因为对于后者,由于行移动而导致数据源和显示不同步,并且会导致异常。