上下拉重新整理,下拉重新整理

來源:互聯網
上載者:User

上下拉重新整理,下拉重新整理

一.上拉重新整理1.為什麼要做上拉重新整理?     想要看一些舊的(更多)資料,就需要上拉重新整理,載入更多資料 2.上拉重新整理永遠都顯示在tableView最底部,用什麼搭建?     tableFootView永遠在tableView最底部,可以用它來搭建 3.上拉重新整理商務邏輯     3.1當上拉重新整理控制項(footView)全部顯示的時候,載入更多資料     3.2介面搭建          用xib根據自己需要搭建想要的樣式 4.怎麼判斷上拉重新整理控制項完全顯示?     4.1完全顯示的條件是: 位移量 = 內容高度 + 底部TabBar條高度 - 螢幕的高度      4.2通過scrollView的代理方法可以監聽滾動,可以獲得位移量- (void)scrollViewDidScroll:(UIScrollView *)scrollView;       4.3 當前位移量 > = 位移量的時候,上拉重新整理控制項就完全顯示了 5.我們發現捲軸在最上面和最下面會被擋住一部分     5.1怎麼解決?          設定一下捲軸的額外捲動區域就可以了      5.2怎麼拿到這個屬性?          去tableView標頭檔尋找 UIEdgeInsets關鍵字,找不到          5.3去tableView的父控制項scrollView中尋找          找到 scrollIndicatorInsets屬性,設定一下,發現就搞定了 6.上拉載入資料     6.1伺服器返回的資料都有一個編號ID(自己的理解)       6.2編號ID是遞增的,新的資料存到資料庫,編號ID依次遞增      6.3顯示到介面的資料從上到下,編號ID遞減,也就是,越下面,資料越早      6.4所以,我們只要拿到最下面一條資料的編號ID,請求這個編號之前的資料,就能拿到之前的資料了      6.5這個編號ID,伺服器會給我們,我們只需要記錄下來就可以了          6.6需要載入更多資料,只需要請求參數加上這個編號ID就可以了 7.bug:如果我們一直點擊上拉重新整理,會發送很多請求,導致資料重複,怎麼解決?     7.1搞一個BOOL屬性記錄是否在載入更多資料,如果在載入,就不需要重複發送請求了      7.2這個屬性記錄在哪裡?控制器?          記錄在控制器不太好,   上拉重新整理屬於控制項的商務邏輯,最好記錄在控制項內  載入的時候賦值為yes  載入完畢賦值為no          如果記錄在控制器,如果其它地方用到上拉重新整理,就需要把控制器也拖過去,耦合性太高          7.3 一開始運行,上拉重新整理控制項就會顯示,怎麼導致的?          一開始沒有資料,上拉重新整理會顯示在tableView上,就會載入資料          7.4 怎麼解決?           一開始先把footView隱藏,在第一次載入完資料,重新整理表格之後,再顯示          7.5 空間從xib載入出來,尺寸不對?          自動展開屬性取消掉就可以了 8.根據是否完全顯示,更改上拉重新整理xib裡面空間的內容 二.下拉重新整理  1.為什麼做下拉重新整理?     使用者想要看到最新的資料 2.下拉重新整理,控制項添加到哪裡? headerView上?    不能添加到headerView 上,   一般headerView留給廣告位 3.下拉重新整理控制項使用什麼?     使用一個view , 設定view的y值為負數,就能顯示在最上面,而且內建彈簧效果,把這個view添加到tableView上面 4.下拉控制項商務邏輯     4.1 下拉控制項在鬆手的時候,才需要重新整理資料     4.2 拖動的時候,判斷是否完全顯示,完全顯示,下拉控制項的文字和箭頭方向     5.下拉控制項完全顯示條件     5.1怎麼判斷下拉控制項 完全顯示?          也是用過位移量(為負值)  offsetY =  - (導航條高度 + 下拉控制項高度)              因為本來就有一個位移量為導航條的高度      5.2 通過代理方法擷取當前位移量             當前位移量  <= offsetY的時候,就完全顯示  6.怎麼修改下拉控制項的文字和箭頭方向      6.1 在控制項中定義一個BOOL屬性記錄是否完全顯示      6.2 在控制器中(代理方法中)判斷是否完全顯示,完全顯示賦值為yes      6.3 連線拿到要改變得控制項, 重寫BOOL屬性的set方法,在方法中修改文字和箭頭方法      6.4 修改箭頭方法用transform,正常情況設定負的角度(小於180)應該逆時針 ,但我們設定-180,發現為順時針旋轉??          蘋果判斷臨界值,以最小的角度旋轉,我們只需要在180上面加上一個很小的數值就可以了 7.上下拉衝突     7.1當網路比較慢,使用者先上拉重新整理,在下拉重新整理就會有bug,會造成資料錯亂,怎麼解決?      7.2隻需要在上拉重新整理載入資料之前,把之前的所有的資料全部清除,始終儲存最新的資料      7.3 假設網路比較慢 使用者上拉之後,回來馬上又下拉   未經處理資料為   51 50 49 48 47          上拉伺服器應該返回資料 46 45 44 43 42          下拉伺服器應該返回資料  53 52 51 50 49          最終伺服器同時返回資料就會變成 53 52 51 50 49  46 45 44 43 42          資料就丟失了兩條      7.4 怎麼解決?          只允許同時發送一條請求          7.5 定義網路管理者對象,懶載入,在發送新的請求的時候,把之前的請求取消      // 取消之前請求    [self.mgr.tasks makeObjectsPerformSelector:@selector(cancel)]; 8.什麼時候需要重新整理資料      8.1並不是一鬆手就要重新整理資料          下拉控制項完全顯示的時候,鬆手才需要載入最新資料      8.2怎麼監聽鬆手?          代理方法:// 停止拖動- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate      8.3正在請求最新資料的時候,不需要再發送請求資料了(一直拖拽下拉控制項)          同樣,在控制項中也搞一個BOOL屬性,記錄是否正在載入資料      8.4重新整理最新資料,一次有可能只有一條最新資料,          現有資料  50 49 48 47 46          載入資料  51 50 49 48 47          載入完資料排列  51 50 49 48 47 50 49 48 47 46          這樣會造成資料重複          因為把資料轉為模型後,遍曆模型,把模型加到數組中,原來數組中就可能有這些模型了          8.5 解決資料重複          在載入新的資料之前,只需要把之前的資料全部清空就可以了  三.用第三方框架組成上下拉重新整理 直接上原始碼
 1 - (void)setupRefreshView 2 { 3     // 下拉重新整理 4     // 當鬆手,並且下拉重新整理完全顯示的時候,就會觸發下拉重新整理 5     MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)]; 6 //下拉控制項透明度自動變化(不拉的時候完全透明)  7     header.automaticallyChangeAlpha = YES; 8     self.tableView.mj_header = header; 9    10     // 上拉重新整理11     MJRefreshAutoNormalFooter *footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];12     //上拉控制項自動隱藏,沒有資料的時候隱藏13     footer.automaticallyHidden = YES;14     self.tableView.mj_footer = footer;15 }16  17 注意:觸發上下拉重新整理,控制項會一直存在,需要我們手動隱藏18  19 在資料請求成功的時候隱藏20  // 結束上拉重新整理21         [self.tableView.mj_footer endRefreshing];22  23  24    // 結束下拉重新整理25         [self.tableView.mj_header endRefreshing];

 

    

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.