-1

次のコードで TableViewCells を並べ替えます。

- (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath{
[self.ammoTable moveRowAtIndexPath:indexPath toIndexPath:[NSIndexPath indexPathForRow:[self.tableArray count] - 1 inSection:1]];
}

-(IBAction)setEdit{
if ([self.button.currentTitle isEqualToString:@"Edit"]) {
    self.ammoTable.editing = YES;
    [self.button setTitle:@"Done" forState:UIControlStateNormal];
}
else{
    self.ammoTable.editing = NO;
    [self.button setTitle:@"Edit" forState:UIControlStateNormal];

}
}

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath   
*)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
    // fetch the object at the row being moved
NSString *r = [self.tableArray objectAtIndex:fromIndexPath.row];

    // remove the original from the data structure
[self.tableArray removeObjectAtIndex:fromIndexPath.row];

    // insert the object at the target row
[self.tableArray insertObject:r atIndex:toIndexPath.row];

[self.ammoTable reloadData];
}

ビューを離れてビューに戻る場合を除いて、すべてがうまく機能します。セルを移動すると、ビューが元に戻ったときに、それらはすべて元の順序になっています。これには何か理由がありますか? 助けてくれてありがとう!

4

5 に答える 5

0

ある種の配列からデータをロードしていると思います。テーブル内のセルを移動するだけでなく、この配列に対しても同じ操作を行う必要があります。

于 2013-02-12T04:26:58.830 に答える
0

プロパティに加えた変更を保持する必要があるtableArrayため、次にビューが表示されたときにその配列を再度リロードすると、行が新しい順序でロードされます。

于 2013-02-12T04:27:07.837 に答える
0

テーブルビューを古い配列でリロードしているため、つまり更新された配列ではなく、配列を再初期化しているため、viewDidLoad にある可能性があります。appDelegate で配列を作成して初期化します。セルを移動するときにこの配列を使用して変更を加えると、要素の順序が保持されます。

appDelegate から配列を作成してアクセスする方法については、このリンクを参照してください

于 2013-02-12T04:29:07.893 に答える
0

テーブルビュー セルに変更を加える場合、テーブル配列にも同じ変更を加える必要があります。それ以外の場合、テーブルビュー セルは配列内の順序に従ってロードされます。

于 2013-02-12T04:29:20.143 に答える
0

@アレックス

セルの順序を変更しないと、配列が自動的に順序を記憶するのはなぜですか? しかし、並べ替えたい場合は、手動で状態を記憶させる必要がありますか?

ご覧のとおり、配列は順序を覚えていません。配列に従って自分自身を配置するのはテーブルです。それがデータソースの要点です。データ ソースを操作すると、テーブルを操作できます。ただし、テーブルを操作してもデータソースは変更されません。そのため、テーブルに変更を加える場合は、事前に dataSource を変更して同じことを反映することを忘れないでください。

たとえば。テーブルから行を削除したいとします。commitEditingメソッドに移動して 単純に行を削除すると、無効な更新または不整合の例外でクラッシュすることになります。最初に dataSource から対応するセルのデータを削除してから、行を削除する必要があります。

あなたの場合も同じです..最初にデータ配列内のオブジェクトを交換し、次にそれに応じて行を移動します。

私がはっきりしていることを願っています。乾杯して楽しんでください。

于 2013-02-12T05:01:11.170 に答える