仅移动指定indexPaths中的单元格

时间:2014-02-23 06:12:43

标签: objective-c uitableview tableview

我有一个tableViewController,视图中有一些单元格。我想要实现的是用户只能在我在数组中指定的indexPath中移动某些单元格。

假设我有这些项目:

  1. 父项目
  2. 父项目
  3. 父项
    1. 儿童用品
    2. 儿童用品
    3. 儿童用品
  4. 父项目
  5. 父项目
  6. 我希望这些“子项目”可以编辑和移动,但只能在其边界内。用户不应将这些项目移出其父项目。

    我已经想出如何只让这些项目可编辑,也可以移动。问题是我可以将这些项目拖到父项之外。我有一个名为indexOfCurrentSubViews的数组中所有子项的索引。

    我看到了这个问题的两个解决方案:

    1. 将它们拖出父母之外是不可能的。如果你试图拖动到0(在他们的父母身上),他们只是坚持,不会再继续。
    2. 如果你碰巧将它们拖到外面,它们就会漂浮回来。
    3. 问题是我不知道如何实现这些。请记住,所有这些项目都在一个列表中。这里没有多个部分。跟踪哪些项目是子项目的唯一事情是数组indexOfCurrentSubViews

      我尝试在if-statement内创建一个moveRowAtIndexPath,以检查toIndexPath.row是否大于indexOfCurrentSubViews中最后一个元素的行,或者小于第一行的行项目。如果是这样,请使indexPath等效于数组中的最小(或最大)项。这适用于将它们正确放置在我拥有的另一个数组中(以跟踪视图中的所有项目)。但即使它正确地放在我的数组中,它仍然在视图中的错误位置。

      我怎样才能达到我想要的东西?

1 个答案:

答案 0 :(得分:2)

实施此UITableViewDelegate方法:

- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath

基本上,您需要确定建议的indexPath是否有效。如果没有,那么您需要返回一个可接受的备用indexPath。如果可以接受,只需返回建议的indexPath。