在IndexPath处移动Row时更新数据源的问题

时间:2012-08-08 13:13:54

标签: ios uitableview ios5

我试图在滑动手势上从一个位置移动到另一个位置,即。当我向右滑动任何一个单元格时,刷过的单元格应该到达单元格的底部,为此我编写了代码,它在某些条件下工作正常,即假设我在索引位置0处刷过单元格它正确地进行到在单元格的底部,假设我的数组中有“A,B,C”,因此表格显示“A,B,C”。现在假设我选择“A”< / strong>滑动位于 0 的位置,它位于底部,现在表格将显示 B,C,A ,这是正确的。现在我滑动位置 1 “C”,以便它应该转到底部。现在我的表显示 C,A,B。但实际上它应该显示 B,A,C。

以下是我的代码

if (state == JTTableViewCellEditingStateRight) 
{

   NSIndexPath *selectedIndexPath = [tableView indexPathForSelectedRow];

  [tableView moveRowAtIndexPath:selectedIndexPath toIndexPath:[NSIndexPath indexPathForRow:[self.rows count]-numberOfMoves inSection:0]];  
   [self moveRows];
} 


- (void)moveRows
{

    NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
    NSString *selectedString = [self.rows objectAtIndex:selectedIndexPath.row];     

    [self.rows removeObjectAtIndex:selectedIndexPath.row];
    [self.rows insertObject:selectedString atIndex:[self.rows count]];   
}

此致 兰吉特

1 个答案:

答案 0 :(得分:0)

让我们分析您的代码:

[self.rows insertObject:selectedString atIndex:[self.rows count]]; 

似乎你把新项目总是放在数组的末尾而不是新位置。


移动对象的正确方法是您的数据源如下:

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
    id _object = [self.rows objectAtIndex:fromIndexPath.row];
    [self.rows removeObjectAtIndex:fromIndexPath.row];
    [self.rows insertObject:_object atIndex:toIndexPath.row];
}

它可能对你有帮助。