温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

iOS如何开发TableView网络请求及展示预加载

发布时间:2022-07-20 09:46:55 来源:亿速云 阅读:242 作者:iii 栏目:开发技术

这篇文章主要介绍“iOS如何开发TableView网络请求及展示预加载”,在日常操作中,相信很多人在iOS如何开发TableView网络请求及展示预加载问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”iOS如何开发TableView网络请求及展示预加载”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

传统的上拉加载更多

在iOS的开发过程中,如果用列表展示数据,此时一般的逻辑为上拉加载更多数据,配合MJRefresh就是在滑动到最底部时,触发加载更多的网络请求。

iOS如何开发TableView网络请求及展示预加载

滑动过程中预加载

如果希望体验好一点,那么可以在滑动的过程中,加入一个预加载机制,具体的做法如下:

方法1(最简单、高效和最推荐):

使用MJRefresh的特性(MJ大神已经替我们封装好了,但是大多数人都不知道),在设置TableVIew的MJRefreshAutoFooter时,triggerAutomaticallyRefreshPercent这个属性默认是1,我们来看看源代码中是怎么说的:

iOS如何开发TableView网络请求及展示预加载

此时我们只需要一行代码:

MJRefreshAutoFooter *footer = [MJRefreshAutoFooter footerWithRefreshingTarget:weakSelf refreshingAction:@selector(loadMore)];
footer.triggerAutomaticallyRefreshPercent = -20; //关键的一行代码
self.tableView.mj_footer = footer;

将这个属性设置为一个负数,意思就是当控件的底部出现-20时就自动刷新,很明显,-20的距离就代表还没有滑动到底部,就触发了刷新了,这样便完成了我们的预加载的需求。

方法2(自己计算实现,不推荐了):

下滑(上拉)过程中,对当前scrollView(tableView)的剩余可滑动距离(总滑动距离占可滑动距离的)比例进行判断,如果小于(大于)某个设定值,那么就触发网络请求(加载更多数据)。

iOS如何开发TableView网络请求及展示预加载

  • 这样做的好处显而易见,用户不必再去多做一个上拉加载更多数据的操作了,如果我们需要展示的数据量非常大的话,那么此种加载方式可以节省用户大量的操作时间,大大提升了用户的使用体验。

下面是具体实现细节(此细节是针对上述方法2的)

方法2是作者之前自己研究出来的,但是后来发现MJ已经为我们实现了这么好的方法,就用不到了。有兴趣的同学可以看看方法2的具体实现:

1.我们需要在实现网络请求的类中添加一个Bool属性,用来判定当前是否正在进行网络请求;

@property (nonatomic, assign) BOOL isLoadingDataBool; //是否正在请求数据

2.在scrollView的滑动代理方法中,处理预加载机制的逻辑

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (self.tableview.mj_footer.state == MJRefreshStateNoMoreData) {
        // 没有更多数据,直接返回
        return;
    }
    
    // 预加载的计算逻辑,当滑动距离>80%目前剩余可滑动距离的时候,触发预加载
    CGFloat threshold = 0.8; //设定的比例值
    CGFloat current = scrollView.contentOffset.y + ((scrollView.contentSize.height != scrollView.frame.size.height) ? scrollView.frame.size.height : 0); //当前滑动距离
    CGFloat total = scrollView.contentSize.height; //总的可滑动距离
    CGFloat ratio = current / total;
    if (ratio >= threshold) { //滑动距离超过比例值
        [self requestDataList:NO showHUD:NO]; //发起加载更多网络请求
        self.isLoadingDataBool = YES; //设置正在网络请求状态为YES(一定要写在请求之后)
    }
}

3.处理网络请求

/// 发起网络请求
/// @param isReloadBool 是否为刷新请求
/// @param isShowHUDBool 是否加载指示器 
- (void)requestDataList:(BOOL)isReloadBool showHUD:(BOOL)isShowHUDBool {
    if (self.isLoadingDataBool) {
       // 当前正在请求,直接返回
       return;
    }
    kWeakSelf(self);
    [DZCXHTTP requestWithResulted:^(BOOL isSuccessed, NSDictionary *dataDic, NSString *errorMsg) {
        kStrongSelf(self);
        strongself.isLoadingDataBool = NO; //请求完成,设置正在请求的状态为NO
    }];
}

到此,关于“iOS如何开发TableView网络请求及展示预加载”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI