右侧TableView的刷新细节
- 上拉刷新时,在刷新右侧的TableView表格
后
,根据加载数据的情况更新底部刷新控件的状态 - 下拉刷新时,在刷新右侧的TableView表格
后
,根据加载数据的情况更新底部刷新控件的状态 - 每次点击左边的分类表格,加载右侧TableView表格数据
之前
,更新底部刷新控件的状态
/**
* 时刻监测footer的状态
*/
- (void)checkFooterState{
AHRecommendCategory *cate = AHselectCategory;
self.userTableView.mj_footer.hidden = (cate.users.count == 0);
if(cate.users.count == cate.total){
[self.userTableView.mj_footer endRefreshingWithNoMoreData];
} else {
[self.userTableView.mj_footer endRefreshing];
}
}
下拉刷新时要注意
- 清楚以前右侧TableView的旧的用户数据
- 重新加载新的数据
[cate.users removeAllObjects];
[cate.users addObjectsFromArray:users];
每次点击左边的分类表格时注意
先
让顶部刷新控件和底部刷新控件结束刷新再
加载右侧TableView的数据
如果多次频繁点击左侧的分类表格,会多次频繁发送请求操作,这时服务器会依次返回响应数据,但我们要显示的是最后一次发送请求操作得到的数据
,在这之前发送请求获得的数据没必要显示,这里怎么处理?
- 新建一个字典属性params,保存请求参数
self.params = params
- 在block中,看返回的请求参数
params
和self.params
是不是同一个,如果不是同一个的话,证明block中返回的请求不是最后一个请求,是之前的请求。 - 如果不是最后一个请求的话,可以
先把返回的数据处理一下,存起来
,以便下次使用,但不刷新表格。
- (void)loafNewUser{
AHRecommendCategory *cate = AHselectCategory;
cate.currentPage = 1;
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"a"] = @"list";
params[@"c"] = @"subscribe";
params[@"category_id"] = @(cate.id);
params[@"page"] = @(cate.currentPage);
self.params = params;
[[AFHTTPSessionManager manager] GET:@"http://api.budejie.com/api/api_open.php" parameters:params
progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSArray *users = [AHRecommendUser mj_objectArrayWithKeyValuesArray:responseObject[@"list"]];
cate.total = [responseObject[@"total"] integerValue];
[cate.users removeAllObjects];
[cate.users addObjectsFromArray:users];
if(self.params != params) return;
[self.userTableView reloadData];
[self.userTableView.mj_header endRefreshing];
[self checkFooterState];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if(self.params != params) return;
[SVProgressHUD showErrorWithStatus:@"加载失败!"];
[self.userTableView.mj_header endRefreshing];
}];
}
控制器被销毁时,停止所有的请求操作
- (void)dealloc{
[self.manager.operationQueue cancelAllOperations];
}