用到的三方有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];
}