我有一个从 NSFetchedResultsController 接收数据的 UITableView。NSFetchedResultsController 的数据偶尔会被网络调用更新。每次通过网络调用更新数据后,我都会使用 [tableView reloadData] 更新 UITableView 以添加任何新项目。
我的部分 UI 还使单元格可以水平重新定位。我希望每次刷新表的数据时不要重新定位这些单元格,但不幸的是,[tableview reloadData] 就是这样做的。
在不重新定位行的情况下更新表视图中的数据的理想方法是什么?我应该覆盖 tableview 的 reloadData 方法并在那里做一些花哨的事情,或者可能覆盖 tableview 单元格 layoutSubviews 方法吗?
我像这样定位单元格:
CGRect newFrame = cell.frame;
newFrame.origin.x = -cell.frame.size.width;
cell.frame = newFrame;
在 NSFetched 结果控制器从网络调用中接收到更多数据后,它会调用它的委托方法:
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
[self.eventTableView reloadData];
}
调用tableview: cellForRowAtIndexPath:并且从出队返回的单元格的原点位于 (0,0)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"EventCell";
EventCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
[cellNib instantiateWithOwner:self options:nil];
cell = self.customCell;
}
// Configure the cell...
Event *event = [fetchedResultsController objectAtIndexPath:indexPath];
[cell configureCellWithEvent:event];
return cell;
}