Я думаю, что лучший способ справиться с этим в модели данных, как другие упомянутые, но если вам действительно нужно, чтобы сделать это, вы можете сделать следующее:
Согласно Apple's documentation, только видимые разделы/клетки перезагружается когда вы звоните reloadData
так что вы должны знать, когда последний видимый заголовок оказывается, таким образом вы установите:
tableViewContentHasChanged = YES;
[self.tableView reloadData];
Тогда в cellForRowAtIndexPath: получить последний отображаемый индекс и сохранить его в качестве члена переменный:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
//Your cell creating code here
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"TryCell"];
//Set last displayed index here
lastLoadedSectionIndex = indexPath.section;
NSLog(@"Loaded cell at %@",indexPath);
return cell;
}
Таким образом, когда viewForHeaderInSection:
называется вы будете знать, что последний заголовок в этом перегрузочном событии:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
//Create or customize your view
UIView *headerView = [UIView new];
//Toggle tableViewContentHasChanged when it's the last index
if (tableViewContentHasChanged && section == lastLoadedSectionIndex) {
tableViewContentHasChanged = NO;
NSLog(@"Reload Ended");
}
return headerView;
}
Пожалуйста, обратите внимание, что этот метод будет работать только тогда, когда последний видимый участок имеет в не более 1 строки.
Надеюсь, это поможет.
Можете ли вы объяснить цель этого флага? –
. Целью является то, что мне нужно обновить некоторые данные в свойстве block для headerViews, когда изменяется содержимое (и, следовательно, индексы). Очевидно, я не хочу делать это все время, только когда происходит изменение. Это цель – user1244109
Если бы я был вами, я бы проверял методы «beginUpdates» и «endUpdates» UITableView. Возможно, он более надежный, чем reloadData. –