用到的三方有MJRefresh
.h
/**聲明一個tableView 屬性*/
@property (nonatomic, strong) UITableView *tableView;
//設置子類需要請求的參數,這里父類聲明,讓子類去調用
-(void)settingRequestParams:(NSMutableDictionary *)params;
.m
#import "DPRequest.h"
#import "MetaDataTool.h"
#import "DPAPI.h"
#import "MJRefresh.h"
等等...
//擴展幾個屬性
//1.存儲服務器返回的所有訂單(次訂單是可變的,要適應上拉加載邏輯)
@property (nonatomic, strong ) NSMutableViewArray *dealArray ;
//2.記錄當前的頁數
@property (nonatomic, assign) int page;//需要轉換類型
//3.記錄用戶最后(最新)請求對象
@property (nonatomic, strong)DPrequest *latestREquest;
@end
//功能
/*設置參數;
發送請求
獲取數據,顯示在tableViews上
*/
@implementation
//懶加載dealsArray,讓其在用到的時候開空間
-(NSMutableView *)dealsArray {
if(nil ==_dealsArray){
_dealsArray = [NSMutableView array];
}
return ?_dealsArray;
}
#pragma mark --創建下拉刷新,上拉加載更多
-(void)addRefreshControl {
//下拉刷新
self.tableView.mj_header =[MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewDeals)];
//添加完成之后,開始刷新
[self.tableView.mj_header beginRefreshing];
//上拉空間(需要加載新數據)
self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreDeals)];?
//下拉觸發方法
-(void)loadNewDeals {
self.page = 1;
//發送網絡請求(GET/POST)
[self sendRequestToServer];
}
//上拉觸發方法
-(void)loadMoreDeals {
self.page++;//這里加多少需要根據SDK中的要求進行設置
[self sendRequestToserver];
}
#pragma mark --向服務器請求數據
-(void)sendRequestToServer {
//創建可變字典,設置發送請求的參數
NSMutableViewDictionary *mutableDic = [NSMutableDictionary dictionary];
/****************重要***************/
[self settingRequestParams:mutableDic];//在.h中聲明的方法,后面可用子類傳參數去調用,這樣子類就不用謝過多的網絡方法
//3.發送請求
self.latestRequest = [api requestWithURL:@"......." params:mutableDic delegate:self];
}
//api協議中需要實現的2個方法(這里如果沒有api代理,是否需要用到AFN?,還是自己去設置請求成功失敗??)
-(void)request:(DPRequest *)request didFinishloadingWithResult:(id)result {
//如果服務器返回的request請求數據不是最新發送的請求,直接返回
if(self.lastestRequest !=request) {
return ;
}
NSArray *array = [MetaDtataTool parseDealsRequest:result];//會在另一個筆記中介紹MetaDataTool(數據變化工具類)
//把array添加到可變數組中去
[self.dealsArray addobjectsFromArray:arrray];//tableView每次刷新的行數有關
//刷新數據源
[self.tableView reloadData];
//停止下拉刷新
[self.tableView.mj_header endRefreshing];
//停止上拉刷新
[self.tableView.mj_footer endRefreshing];
}
-(void)request:(DPRequest *)request didFailWithError:(NSError *)error {
NSLog(@"返回服務器失敗");
//停止下拉刷新
[self.tableView.mj_header endRefreshing];
//停止上拉刷新
[self.tableView.mj_footer endRefreshing];
}