質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Q&A

解決済

1回答

3177閲覧

uitableview cellの並べ替えを保存したい

nanan

総合スコア7

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

0グッド

0クリップ

投稿2015/05/05 04:16

TableViewのcellを並べ替えたいです。

並べ替えはできても並べ替えが保存されず別画面から戻ると、並べ替え前の順番に戻ってしまっています。
どこがおかしいか見ていただけませんでしょうか?
tebleviewのデータはNSMutableArray *objectsに追加しています。

よろしくお願いします。

(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
if(_objects && toIndexPath.row < [_objects count]) {
//移動対象を保持
id item = [_objects objectAtIndex:fromIndexPath.row];

// 配列からいったん消去 [_objects removeObject:item]; //保持しておいた対象を挿入 [_objects insertObject:item atIndex:toIndexPath.row]; }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

TableViewのセルは、別画面から戻ってきたときやセルが画面の外に出たときにcellForRowAtIndexPathメソッドで再描画されます。
ここで保存しておいた内容をセルにセットし直す処理を入れればいけると思うのですがいかがでしょう?

投稿2015/05/06 02:34

jollyjoester

総合スコア1585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nanan

2015/05/06 09:10

ご回答どうもありがとうございます! cellForRowAtIndexPathは下記のようにしています。 現在のmoveRowAtIndexPathの内容ですと、objects配列の変更が保存されないのでしょうか? - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; NSURL *fileURL = _objects[indexPath.row]; NSDictionary *dict = [NSDictionary dictionaryWithContentsOfURL:fileURL]; cell.textLabel.text = dict[@"body"]; return cell; } よろしくお願いいたします。
jollyjoester

2015/05/07 05:24

一応下記の感じで並び順は保持されるようになりました。 ご提示いただいたソースとほぼ同じなので objectsの配列がどっかのタイミングで消えたりしてないか要Debugですねー #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UITableView *tableView; @property (nonatomic, readwrite) NSMutableArray *array; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.array = [NSMutableArray new]; for (int i = 0; i <= 20; i++) { [self.array addObject:[NSString stringWithFormat:@"%d", i]]; } self.tableView.delegate = self; self.tableView.dataSource = self; [self.tableView setEditing:YES animated:YES]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return _array.count; } - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { return YES; } -(BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath { return NO; } - (UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewCellEditingStyleNone; } - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { id item = _array[fromIndexPath.row]; [_array removeObject:item]; [_array insertObject:item atIndex:toIndexPath.row]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; cell.textLabel.text = _array[indexPath.row]; return cell; } @end
nanan

2015/05/07 10:54

ご丁寧にどうもありがとうございます! ご指摘いただいたように配列をいったん消してしまっている箇所がありました。。。 おかげで修正することができました。 大変助かりました!どうもありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問