UISwitch があり、2 つのテーブル ビューの状態を切り替えます。問題はクラッシュの原因となる高速スイッチングです。行の削除には時間がかかるためだと思います (cuz アニメーション)。いくつかのセルを追加し、ほぼ同時にそれらを削除しようとすると、クラッシュします。私に何ができる?どうしてもアニメーションが欲しいので、[self.tableView reloadData]では解決しません。
- (void)switchChangedInIndexPath:(NSIndexPath *)indexPath
{
EBOrderFormCell *cell = (EBOrderFormCell *)[self.tableView cellForRowAtIndexPath:indexPath];
BOOL on = cell.picker.on;
if (indexPath.row == EBOrderFormTakeAway) {
self.takeAway = on;
[self takeAwayChanged];
}
}
- (void)takeAwayChanged
{
NSArray *notTakeAwayCells = [[NSArray alloc] initWithObjects:
[NSIndexPath indexPathForRow:EBOrderFormStreet inSection:0],
[NSIndexPath indexPathForRow:EBOrderFormHouseNumber inSection:0],
[NSIndexPath indexPathForRow:EBOrderFormFlatNumber inSection:0],
nil];
NSArray *takeAwayCells = [[NSArray alloc] initWithObjects:
[NSIndexPath indexPathForRow:EBOrderFormCafe inSection:0],
nil];
[self.tableView beginUpdates];
if (self.takeAway) {
[self.tableView insertRowsAtIndexPaths:takeAwayCells withRowAnimation:UITableViewRowAnimationFade];
[self.tableView deleteRowsAtIndexPaths:notTakeAwayCells withRowAnimation:UITableViewRowAnimationFade];
} else {
[self.tableView insertRowsAtIndexPaths:notTakeAwayCells withRowAnimation:UITableViewRowAnimationFade];
[self.tableView deleteRowsAtIndexPaths:takeAwayCells withRowAnimation:UITableViewRowAnimationFade];
}
[self.tableView endUpdates];
}
更新:次のコードで修正しました:
- (void)takeAwayChanged
{
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
}