Я создаю одно табличное приложение, используя библиотеку TQMultistageTableView
для расширения разделов. Мое требование: если пользователь будет нажимать на разделы таблицы, тогда цвет фона раздела должен измениться на синий цвет, цвет фона остального раздела должен быть белым, если он не выбран/расширен. Для этого я создал массив для сохранения индекса раздела, а затем перезагружаю этот раздел.
В первый раз (когда мой массив равен нулю) он работает нормально. Но проблема в том, что в моем массиве сохранен один индекс раздела (поскольку любой раздел расширяется/выбирается), а затем я пытаюсь расширить другой раздел с перезагрузкой второго раздела, на этот раз он падает с ошибкой ниже:
*** Ошибка утверждения в -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-2935.137/UITableView.m:1368
*** Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Недопустимое обновление: недопустимое количество строк в разделе 1. Количество строк, содержащихся в существующем разделе после обновления (0), должно быть равно количеству строк. содержащихся в этом разделе до обновления (3), плюс или минус количество строк, вставленных или удаленных из этого раздела (0 вставленных, 0 удаленных) и плюс или минус количество строк, перемещенных в этот раздел или из него (0 перемещенных в , 0 съехал)'.
Вот мой код:
//метод открытия заголовка
- (void)mTableView:(TQMultistageTableView *)mTableView1 willOpenHeaderAtSection:(NSInteger)section
{
NSLog(@"Open Header ----%ld",section);
NSDictionary *selectedSection = [NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%ld", (long)section] ,@"section" ,nil];
for(int i=0;i<[ selectedArrayForSectionPlus count];i++)
{
if([[[selectedArrayForSectionPlus objectAtIndex:i] objectForKey:@"section"] isEqualToString:[NSString stringWithFormat:@"%ld", (long)section]])
{
[selectedArrayForSectionPlus removeObjectAtIndex:i];
[self.mTableView.tableView reloadSections:[NSIndexSet indexSetWithIndex:section] withRowAnimation:UITableViewRowAnimationFade];
return;
}
}
[selectedArrayForSectionPlus addObject:selectedSection];
[self.mTableView.tableView reloadSections:[NSIndexSet indexSetWithIndex:section] withRowAnimation:UITableViewRowAnimationFade];//here it is crashing
}
//метод закрытия заголовка
- (void)mTableView:(TQMultistageTableView *)mTableView willCloseHeaderAtSection:(NSInteger)section
{
NSLog(@"Close Header ---%ld",section);
for(int i=0;i<[ selectedArrayForSectionPlus count];i++)
{
if([[[selectedArrayForSectionPlus objectAtIndex:i] objectForKey:@"section"] isEqualToString:[NSString stringWithFormat:@"%ld", (long)section]])
{
[selectedArrayForSectionPlus removeObjectAtIndex:i];
[self.mTableView.tableView reloadSections:[NSIndexSet indexSetWithIndex:section] withRowAnimation:UITableViewRowAnimationFade];
return;
}
}
}
//метод viewForHeaderInSection
- (UIView *)mTableView:(TQMultistageTableView *)mTableView viewForHeaderInSection:(NSInteger)section;
{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.mTableView.frame.size.width, 80)];
for (int i = 0; i<selectedArrayForSectionPlus.count; i++) {
if([[[selectedArrayForSectionPlus objectAtIndex:i] objectForKey:@"section"] isEqualToString:[NSString stringWithFormat:@"%ld", (long)section]])
{
[view setBackgroundColor:[UIColor colorWithRed:0/255.0 green:150/255.0 blue:214/255.0 alpha:1.0]];
}
else
{
[view setBackgroundColor:[UIColor whiteColor]];
}
}
return view;
}
Кто-нибудь знает, как перезагрузить раздел?
Спасибо за любые указатели!
willCloseHeaderAtSection
, это создает проблему, когда iOS запускает вызов этого метода, когда вы нажимаете на любой другой раздел, чтобы развернуть его. Вы должны отслеживать текущий открытый/расширенный раздел ячейки вwillOpenHeaderAtSection
и выполнять свой код внутриwillCloseHeaderAtSection
только тогда, когда раздел совпадает, в противном случае просто вернитесь. Сбросьте отслеживаемый раздел, если он совпадает, и выполните свой код вwillCloseHeaderAtSection
. Надеюсь, вы понимаете, что я имею в виду. 19.11.2015