Таблица View Обновить разделы Сбои
У меня есть табличное представление с 4 разделами и 1-2 ячейками табличного представления на раздел. Первая ячейка имеет Uiswitch как вспомогательный вид и управляет цветовой темой приложения, переключаясь между дневным и ночным режимами. После нажатия переключателя вызывается функция, меняющая цвета панели навигации и цвета фона. В этой функции я также поставил строку
[self.tableview reloadData];
обновить саму таблицу новыми цветами. Он работает нормально, но нет анимации, поэтому я использовал это вместо
[self.tableView reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 3)] withRowAnimation:UITableViewRowAnimationFade];
Когда эта линия используется, переключатель застревает, и приложение зависает. Он не падает, скажем так, то есть нет журнала аварий, он просто зависает и Uiswitch останавливает середину анимации.
Я заметил, что могу перезагрузить разделы, в которых нет ячеек, содержащих дополнительные представления, и это прекрасно работает с анимацией затухания. То есть это работает
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:2] withRowAnimation:UITableViewRowAnimationFade];
Потому что третий раздел не имеет никаких ячеек с дополнительными видами. Но любой раздел, имеющий ячейку с дополнительным представлением (т. Е. Разделы 0 и 2), если я попытаюсь перезагрузить его, приложение зависает.
Есть идеи, почему это происходит? Ниже мой cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier];
if (indexPath.section == 0) {
cell.textLabel.text = [section0 objectAtIndex:indexPath.row];
cell.accessoryType = UITableViewCellAccessoryNone;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
if (indexPath.row == 0) {
cell.accessoryView = colorSchemeSwitch;
}
else if (indexPath.row == 1) {
cell.accessoryView = autoLockSwitch;
}
}
else if (indexPath.section == 1) {
cell.textLabel.text = [section1 objectAtIndex:indexPath.row];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
else if (indexPath.section == 2) {
cell.textLabel.text = [section2 objectAtIndex:indexPath.row];
cell.accessoryType = UITableViewCellAccessoryNone;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.detailTextLabel.text = [NSString stringWithFormat:@"%i \t", (int)app.fontSize];
fontSizeSlider.value = app.fontSize;
cell.accessoryView = fontSizeSlider;
}
else if (indexPath.section == 3) {
cell.textLabel.text = [section3 objectAtIndex:indexPath.row];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.detailTextLabel.text = app.color;
}
cell.backgroundColor = app.cellBackgroundColor;
cell.textLabel.textColor = app.textColor;
UIView *backgroundColorView = [[UIView alloc] init];
backgroundColorView.backgroundColor = app.cellSelectedColor;
[cell setSelectedBackgroundView:backgroundColorView];
return cell;
}