百思不得其姐关注模块的推荐关注中 右侧TableView刷新细节

右侧TableView的刷新细节

注意更新底部刷新控件footer的状态

  • 上拉刷新时,在刷新右侧的TableView表格,根据加载数据的情况更新底部刷新控件的状态
  • 下拉刷新时,在刷新右侧的TableView表格,根据加载数据的情况更新底部刷新控件的状态
  • 每次点击左边的分类表格,加载右侧TableView表格数据之前,更新底部刷新控件的状态
/** * 时刻监测footer的状态 */

- (void)checkFooterState{
    AHRecommendCategory *cate = AHselectCategory;

    // 每次刷新右边数据时, 都控制footer显示或者隐藏
    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中,看返回的请求参数paramsself.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) {
        // AHLog(@"%f",downloadProgress.fractionCompleted); // 下载进度
    } 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];

        // 监测footer的状态
        [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];
}

你可能感兴趣的:(控件)