美文网首页ios开发记录iOS 的那些事儿
iOS 关于UITableView(UICollectionVi

iOS 关于UITableView(UICollectionVi

作者: selice | 来源:发表于2019-07-19 16:04 被阅读1次

    最近做项目中有一个需求:一个UITableView(UICollectionView)的用户体验优化,具体是在用户上拉UITableView(UICollectionView)时,当到达某一个点时,自动去异步获取更多的数据.

    下面使用UICollectionView为例 刷新方法使用到是 MJRefresh框架

    @property (nonatomic, assign) BOOL   isfinish;//是否可以刷新数据
    
    
    #pragma mark - loadData 请求数据方法
    - (void)loadGoodsList {
        
        NSDictionary *para = @{@"id":self.kindId.length>0 ? self.kindId : @"1",
                               @"page":@(self.page),
                               @"sort": @"desc",
                               @"type":@"1",
                               @"pageSize": @30
                               };
        [HNRequestManager sendRequestWithRequestMethodType:HNRequestMethodTypeGET requestAPICode:GoodsTypeList refreshCache:NO requestParameters:para success:^(id responseObject) {
            DLog(@"分类商品列表: %@", responseObject);
            [self.mainCollectionView.mj_header endRefreshing];
            [self.mainCollectionView.mj_footer endRefreshing];
            if (CODE == 0) {
                NSArray *items = [NSArray yy_modelArrayWithClass:[HNProductListModel class] json:responseObject[@"d"][@"goods"][@"items"]];
                
                if (self.page == 1) {
                    [self.dataArray removeAllObjects];
                    [self.mainCollectionView.mj_footer resetNoMoreData];
                }
                    [self.dataArray addObjectsFromArray:items];
    
                if (self.dataArray.count == [responseObject[@"d"][@"goods"][@"total"] integerValue]) {//如果我们的数据已经全部加载完毕
                     self.isfinish       = NO;
                    [self.mainCollectionView.mj_footer endRefreshingWithNoMoreData];
                }else{
                     self.isfinish       = YES;
                }
          
                [self.mainCollectionView reloadData];
             
                }
            
            }else {
                MBErrorMsg;
            }
            
        } faild:^(NSError *error) {
            
            [self.mainCollectionView.mj_header endRefreshing];
            [self.mainCollectionView.mj_footer endRefreshing];
         
        }];
    }
    

    关键:我们在代理方法中的 willDisplayCell 方法中处理问题(UITableView同理方法)

    //预加载数据
    - (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(8_0){
        
        if (indexPath.row == self.dataArray.count-5 && self.isfinish) {//当加载到数组到倒数第XXX条时我们开始加载下一页数据
            [self footerRefreshing];
        }
    }
    //加载下一页
    - (void)footerRefreshing
    {   self.page ++;
        [self loadGoodsList];
    }
    
    

    经测试在网络正常下,可以明显提升流畅性。

    仅个人记录,勿喷。

    相关文章

      网友评论

        本文标题:iOS 关于UITableView(UICollectionVi

        本文链接:https://www.haomeiwen.com/subject/ghrslctx.html