<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
2022.02.11更新:新增了最簡單、高效和最推薦的方法。
2020.05.25更新:對總結進行了詳細的補充。
在iOS的開發過程中,如果用列表展示資料,此時一般的邏輯為上拉載入更多資料,配合MJRefresh就是在滑動到最底部時,觸發載入更多的網路請求。
如果希望體驗好一點,那麼可以在滑動的過程中,加入一個預載入機制,具體的做法如下:
使用MJRefresh
的特性(MJ大神已經替我們封裝好了,但是大多數人都不知道),在設定TableVIew的MJRefreshAutoFooter
時,triggerAutomaticallyRefreshPercent
這個屬性預設是1,我們來看看原始碼中是怎麼說的:
此時我們只需要一行程式碼:
MJRefreshAutoFooter *footer = [MJRefreshAutoFooter footerWithRefreshingTarget:weakSelf refreshingAction:@selector(loadMore)]; footer.triggerAutomaticallyRefreshPercent = -20; //關鍵的一行程式碼 self.tableView.mj_footer = footer;
將這個屬性設定為一個負數,意思就是當控制元件的底部出現-20時就自動重新整理,很明顯,-20的距離就代表還沒有滑動到底部,就觸發了重新整理了,這樣便完成了我們的預載入的需求。
下滑(上拉)過程中,對當前scrollView(tableView)的剩餘可滑動距離(總滑動距離佔可滑動距離的)比例進行判斷,如果小於(大於)某個設定值,那麼就觸發網路請求(載入更多資料)。
方法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 }]; }
這個預載入其實不難,但是有幾個細節的地方需要處理好:
1.第二步scrollView的代理方法中計算當前滑動時,一定要判斷當前的contenntSize是否等於scrollView的高度,如果等於的話證明scrollView是剛剛開始滑動,還沒有過一屏的距離,此時在計算當前滑動的距離時,就不能加上scrollView的高度;
2.當滑動的比例值超出我們設定值的時候,移動要先發起網路請求,再設定正在網路請求的狀態為YES,因為在網路請求中會對該狀態進行判斷,如果為YES的話直接就return了;
3.在網路請求的完成回撥中,別忘記了將正在網路請求的狀態改回為NO。
以上就是iOS開發TableView網路請求及展示預載入實現範例的詳細內容,更多關於iOS TableView網路請求預載入的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45