私のアプリには、フォルダーとファイル (1 対多の関係) があります。そのため、アプリを開くと、firstViewController にすべてのファイルが含まれ、各フォルダーをクリックすると、そのフォルダー内のファイルを表示する tableViewController が開きます。
ここで、任意の行をスワイプするたびに、それが一番下の行に移動され、それに応じてテーブルが更新され、次にスワイプされた行が最初にスワイプされた行の上に移動します。
たとえば、現在、私のテーブルに含まれている場合
0 1 2 3
A B C D
Aスワイプ後
0 1 2 3
B C D **A**
Bスワイプ後
0 1 2 3
C D **B A**
等々、
この機能を実行するには、以下に示す NSOrderedSet も更新する必要があります
for (int i = 0; i < [self.folder.file count]; i++)
{
File *file = [self.folder.file objectAtIndex:i];
if(file.completedStatus == false)
{
m_position = i;
m_finalIndexPath = [NSIndexPath indexPathForRow:i inSection:0];
}
}
file.completedStatus = YES;
id obj = [self.folder. file objectAtIndex:row];
NSMutableOrderedSet *files = [self.folder.file mutableCopy];
[files removeObjectAtIndex:row];
[files insertObject:obj atIndex:m_position];
NSIndexPath *currentIndexPath = [NSIndexPath indexPathForRow:row inSection:0];
[m_tableView moveRowAtIndexPath:currentIndexPath toIndexPath:m_finalIndexPath];
self.folder.file = files;
}
[self.managedObjectContext save:nil];
[m_tableView reloadData];
これはこのビューで正常に機能します。ここで self.folder は、ユーザーがクリックする特定のフォルダーです。
今、TestViewController と呼ばれる別の ViewController があり、そこにはファイル オブジェクトが存在するフォルダに関係なく、いくつかのファイル オブジェクトがあります。この TestViewController のテーブルにこれらのファイルを設定しました。ここでも、セルをスワイプすると、色は変わりますが、上記のように位置は移動しません
例えば
0 1 2 3
A C B D
after swiping A and B
0 1 2 3
**A** C **B** D
ここで、A はフォルダー 1 に属し、B はフォルダー 2 に属すことができます。
このTestViewControllerを閉じる(閉じる)と、どうなるかというと
a)デフォルトでfileViewControllerが表示されますb)ファイルAの色が変わり、スワイプされたセルが既にあるかどうかを確認して位置に移動する必要があります。はいの場合は、その上または下に配置する必要があります。
c) 色 B についても同様。
よろしくランジット。