如何在UITableView中的第一个位置移动选定的单元格?

时间:2014-06-06 07:07:44

标签: ios objective-c uitableview

现在我正在尝试动画所选单元格以移动到顶部,这意味着第一个位置有向上和向下滑动动画。

如果tableview有两个以上的项目,用户点击第二个或第三个项目,选定的单元格将移动到第一个位置,第一个到达第二个位置,第二个到达第三个位置。

我已经搜索并实现了一些示例,但我只移动了一个重复的单元格。

以下是我的代码,

 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"didSelectRowAtIndexPath = %d",indexPath.row);
    [tableView beginUpdates];
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                     withRowAnimation:UITableViewRowAnimationTop];
    [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                     withRowAnimation:UITableViewRowAnimationTop];
    // update your dataSource as well.
    [tableView endUpdates];
    [coachInfoTableView reloadData];
}

如果你有任何人知道这个解决方案,请更新我。我真的很感激你。

3 个答案:

答案 0 :(得分:1)

您必须在制作动画之前更新数据源,如果您只想移动单元格,请使用- (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath而不是删除/插入单元格。

调用reloadData将使您在没有任何动画的情况下重新加载表视图。

答案 1 :(得分:0)

您要查找的是要重新排序tableview单元格。

您可以使用两个重要的UITableView数据源协议方法来实现此目的:

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath

有关教程和代码,请参阅HERE。 它将为您提供您提到的动画效果,无需担心cellForRowAtIndex委托方法。

好运!

答案 2 :(得分:-1)

似乎调用[coachIng TableView reloadData]是多余的。

[UITableView reloadData]从原始订单重新加载所有内容。