当UITableView完全重新加载

我有一个控件,部分或完全改变tableView的内容。 发生更改后,我设置了一个标志tableViewContentHasChanged

 BOOL tableViewContentHasChanged = YES; [self.tableView reloadData]; tableViewContentHasChanged = NO; 

我的问题出现在tableView:viewForHeaderInSection: 它在表视图重新加载调用,所以我的标志在该方法内无效。

简而言之,当桌子完全重新加载时,观察正确的方式是什么,所以我可以将标志设置为NO ? 而且,我可能做错了什么?

我认为处理这个问题的最好方法是在其他人提到的数据模型中,但是如果你真的需要这样做的话,你可以这样做:

根据苹果的文档 ,当你调用reloadData时候,只有可见的部分/单元格被重载

所以你需要知道什么时候最后一个可见的标题被渲染,所以你设置:

  tableViewContentHasChanged = YES; [self.tableView reloadData]; 

然后在cellForRowAtIndexPath中:获取最后显示的索引并将其存储在一个成员variables中:

 - (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; } 

请注意,只有最后一个可见部分至less有一行时,此方法才会起作用。

希望这可以帮助。