中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS如何開發TableView網絡請求及展示預加載

發布時間:2022-07-20 09:46:55 來源:億速云 閱讀:241 作者: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

威海市| 喜德县| 元阳县| 孟州市| 石嘴山市| 山阴县| 新营市| 道孚县| 沙坪坝区| 武冈市| 安达市| 哈尔滨市| 盖州市| 紫阳县| 梅州市| 方城县| 陵水| 沙洋县| 酒泉市| 彭泽县| 遵义县| 尚志市| 六枝特区| 万年县| 文昌市| 米易县| 永昌县| 广州市| 济南市| 高碑店市| 盘锦市| 双峰县| 宿迁市| 锡林浩特市| 陕西省| 图木舒克市| 清苑县| 桃园县| 吉首市| 中超| 吴旗县|