4

UITableViewユーザーが部門を選択できるようにする、かなり一般的なグループ化があります。行を選択すると、アクセサリ ビューを更新して新しい行にチェックマークを表示し、前の行から削除します。

テーブルビューの編集も許可します。編集モードでは、チェックマークは非表示になっていますが、これで問題ありません。しかし、ユーザーが現在選択されている (チェックされている) 部門の行を削除した場合は、プログラムでチェックマークを移動する必要があります。

新しい部門が使用されているときにチェックマークを追加および削除するために使用するのと同じアプローチを使用してみました。

- (void)deleteDepartmentAtIndex:(NSInteger)index
{
    //if the current item is using the deleted department, move the checkmark
    Department *dept = [self.departments objectAtIndex:index];
    if (self.item.department == dept)
    {
        UITableViewCell *noneCell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForItem:self.departments.count inSection:0]];
        noneCell.accessoryType = UITableViewCellAccessoryCheckmark;
        [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForItem:self.departments.count inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];
    }

    //delete the department and save
    [dept.managedObjectContext deleteObject:dept];

    //delete the row
    [self.tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForItem:index inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
}

ただし、テーブル ビューが編集モードの場合、行にチェック マーク アクセサリがありません。編集モードのまま行を手動でリロードしようとさえしました (上記のコードに見られるように)。

テーブル ビューが編集モードを終了したときに行のアクセサリが更新されるようにするにはどうすればよいですか?

4

1 に答える 1

8

accessoryType非編集モードに使用し、編集モードに使用する必要がありeditingAccessoryTypeます。このように、チェックマークをクリアしたり、編集モードに出入りするチェックマークを復元したりする必要はありません。に設定editingAccessoryTypeUITableViewCellAccessoryNoneます。

そしてもちろん、各行にcellForRowAtIndexPath:常に適切に設定されていることを確認する必要があります。accessoryType

編集:

オーバーライドsetEditing:animated:すると、編集モードを終了するときに、チェックされた行(表示されている場合)を再ロードできます。

于 2012-12-02T03:58:00.277 に答える