0

スワイプジェスチャで行をある位置から別の位置に移動しようとしています。セルのいずれかを右にスワイプすると、スワイプしたセルはセルの一番下に移動するはずです。これはコードを記述したものであり、ある条件では正常に機能します。つまり、インデックス位置0でセルをスワイプすると、正しく処理されます。セルの下部、配列に A、B、C」があるとすると、テーブルには「A、B、C」と表示されます。次に、「A」を選択して、位置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]];   
}

よろしくランジット

4

1 に答える 1

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];
}

それはあなたを助けるかもしれません。

于 2012-08-08T13:38:17.653 に答える