美文网首页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