这个博客没什么, 就是记录一下局部刷新tableView的示例
- (void)reloadToCheckAccount:(FZMLoginParameters *)parameters{
// 需要更新的cell
NSMutableArray *updates = [NSMutableArray arrayWithCapacity:self.parameters.subParameters.count];
if (self.parameters) {
NSArray *sParams = self.parameters.subParameters.copy;
NSMutableArray *deletes = [NSMutableArray arrayWithCapacity:sParams.count];
// 对比数据 找到需要删除的cell 和需要更新的cell
[sParams enumerateObjectsUsingBlock:^(FZMLoginSubParameters * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
__block BOOL find = NO;
[parameters.subParameters enumerateObjectsUsingBlock:^(FZMLoginSubParameters * _Nonnull obj1, NSUInteger idx1, BOOL * _Nonnull stop1) {
if (obj.subViewMode == obj1.subViewMode) { // 需要更新的
find = YES;
*stop1 = YES;
if (obj.subViewMode != FZMLoginSubViewMode_UserAccountInput) {
[updates addObject:[NSIndexPath indexPathForRow:idx1 inSection:0]];
}
}
}];
if (find == NO) { // 需要删除的
[deletes addObject:obj];
}
}];
// 先删除数据源
NSMutableArray *mary = [NSMutableArray arrayWithArray:self.parameters.subParameters];
NSMutableArray *deleteIndexPath = [NSMutableArray arrayWithCapacity:deletes.count];
[deletes enumerateObjectsUsingBlock:^(FZMLoginSubParameters *obj, NSUInteger idx, BOOL * _Nonnull stop) {
[mary removeObject:obj];
[deleteIndexPath addObject: [self.tableView indexPathForCell:obj.currentCell]];
}];
// 删除数据
self.parameters.subParameters = mary;
[self.tableView beginUpdates];
[self.tableView deleteRowsAtIndexPaths:deleteIndexPath withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
}
// 更新
self.parameters = parameters;
[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:updates withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
}