当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有一行时,此方法才会起作用。
希望这可以帮助。