IOS 列表tableView、collectionView上拉自动加载数据,预加载效果

列表tableView、collectionView上拉自动加载数据,预加载效果,废话不多说直接上代码:
方法一:直接用MJRefresh就可以实现

MJRefreshAutoNormalFooter *footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
        //请求数据
        weakSelf.pageNo++;
        [weakSelf requestListData];
    }];
    //自动触发时间,如果为 -1, 则为无限触发
    footer.autoTriggerTimes = -1;
    //当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新,设置为-1则是未到满屏的时候刷新
    footer.triggerAutomaticallyRefreshPercent = -1;
    self.tableView.mj_footer = footer;

方法二:通过数据条数来控制

//模拟请求网络数据
     WEAKSELF;
    self.isLoading = YES;
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        sleep(1.0);
        NSMutableArray *arr = [NSMutableArray array];
        for (int i = 0; i<self.pageSize; i++) {
            NSString *str = @"哈哈哈哈哈";
            [arr addObject:str];
        }
        dispatch_async(dispatch_get_main_queue(), ^{
            if (weakSelf.pageNo == 1 && weakSelf.allData.count) { //清空
                [weakSelf.allData removeAllObjects];
            }
            self.isLoading = NO;
            //[weakSelf dissmissHud];
            [weakSelf.allData addObjectsFromArray:arr];
            [weakSelf.tableView reloadData];
        });
    });

然后在代理方法里判断数据条数进行刷新:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (self.isLoading == YES) {
        return;
    }
    // 80%数据出现后,就去加载数据
    if (indexPath.row > self.allData.count * 0.8) {
        self.pageNo++;
        [self requestListData];
    }
    
}

方法三:与第二种方法类似:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    if (indexPath.row == self.allData.count - 5 && self.isLoading) {
        self.pageNo++;
        [self requestListData];
    }
}

附上demo,喜欢的点赞

END.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明似水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值