Редактировать: Решение этого ответа связано с iOS7 иногда возвращаются NSIndexPath
и другие времена возвращения NSMutableIndexPath
. Проблема не была связана с begin/endUpdates
, но, надеюсь, решение поможет некоторым другим.IOS 7 beginUpdates endUpdates несовместимым
Все - я бег моего приложения на прошивке 7, и я бег в проблемы с beginUpdates
и endUpdates
методами для UITableView
.
У меня есть табличное представление, которое необходимо изменить при изменении высоты ячейки. Ниже мой код:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
// If our cell is selected, return double height
if([self cellIsSelected:indexPath]) {
return 117;
}
// Cell isn't selected so return single height
return 58;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
ChecklistItemCell *cell = (ChecklistItemCell *)[self.tableview cellForRowAtIndexPath:indexPath];
[cell.decreaseButton setHidden:NO];
[cell.increaseButton setHidden:NO];
// Toggle 'selected' state
BOOL isSelected = ![self cellIsSelected:indexPath];
DLog(@"%@", selectedIndexes);
DLog(@"is selected: %@", isSelected ? @"yes":@"no");
// Store cell 'selected' state keyed on indexPath
NSNumber *selectedIndex = @(isSelected);
selectedIndexes[indexPath] = selectedIndex;
[tableView beginUpdates];
[tableView endUpdates];
}
В beginUpdates
и endUpdates
методы работают довольно непоследовательно. Метод didSelectRowAtIndexPath
вызывается правильно при каждом касании (я думал, что сначала пользовательский интерфейс блокируется), а selectedIndexes
правильно сохраняет переменные значения. Проблема в том, что иногда я касаюсь ячейки таблицы, и все методы называются правильно, но высота ячейки не изменяется. Кто-нибудь знает, что происходит?
ТАК на помощь! – coder
Я применил это решение, сделав «строгий» indexPath и используя его в поиске «forKey». Например.: NSIndexPath * strictIndexPath = [NSIndexPath indexPathForItem: indexPath.row inSection: indexPath.section]; – Rob
@rob Мне это нравится. Обновлен мой ответ с слегка измененным изменением. –