第一步第三方库 EGOTableViewPullRefresh 必须的导的
添加QuartzCore.framework组建
导包#import "EGORefreshTableHeaderView.h" 遵守协议
<EGORefreshTableHeaderDelegate>
必要的声明
EGORefreshTableHeaderView *_refreshView;
BOOL _isLoading;
第三步 - (void)viewDidLoad里
_refreshView = [[EGORefreshTableHeaderViewalloc]initWithFrame:CGRectMake(0, -self.tableView.frame.size.height,self.tableView.frame.size.width,self.tableView.frame.size.height)];
设置代理
_refreshView.delegate =self;
[self.tableViewaddSubview:_refreshView]; //此处控制器继承的时uitableviewcontroller
[_refreshViewrefreshLastUpdatedDate]; //《《刷新完后给下拉页面加时间》》
[selfstartRequest]; //刚进入本视图的页面是在此请求出来的。。。。。。此处主要是为刚进入页面时准备一些显示的数据,由asi请求,这里不写了
[self.tableViewaddSubview:_refreshView];
第四步
代理方法1
#pragma mark --UIScrollViewDelegate(若是继承的uitableviewcontroller不用声明遵守协议继承UIScrollView)--
// 《《这两个方法:: 拖拽结束 与 滚动(这两个状态) 的完美结合,考虑到拖动过程和停止的瞬间》》
//滚动过程中此方法一直被调用(一旦发现到底了 就赶紧请求数据)
//个人觉得下面这个方法关键的一个方法,其实每次拉到底上拉的时候,向服务器请求数据的时此方法
下面还有一个是跟下拉有关的也是关键的一个地方
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
//因为一直在调用 当拉到底准备加载接下来的数据时 根据拖动的程度 此处可能连续请求 n 页数据
//判断拉到底了吗 如果拉到底则进行请求数据继续展示
if (scrollView.contentOffset.y + scrollView.frame.size.height > scrollView.contentSize.height+50) {
_currentPage++;
[self requestMoreWithPage:_currentPage];
//带着参数(请求的页数)去请求数据
} 此处if语句主要实现了”上拉加载“
[_refreshViewegoRefreshScrollViewDidScroll:scrollView];
// 可能是将scrollview跟这个第三方库关联的(比如 上拉加载后会在下拉页面显示一次时间,比如下拉一下那个下拉箭头朝上朝下的动画也跟着有关)
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
[_refreshViewegoRefreshScrollViewDidEndDragging:scrollView];
}
代理方法2
#pragma mark --EGORefreshTableHeaderView--
//每进行一次下拉操作 执行执行一次该方法
//个人觉得下面这方法是最有用的地方,实现了下拉一下请求一次数据,达到了下拉刷新的目的了,恢复到了当初进入这个页面时 那个状态
- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{
if (_isLoading ==NO) {
_isLoading = YES;
NSLog(@"加载状态yes:%d",_isLoading);
}
[selfstartRequest];//page=1时(给初始数据) 在viewDidLoad里请求一次在这里可能请求多次(返回来后可以进行多次下拉操作 此时要的还是当初刚进到这个页面时的数据)。。。。
NSLog(@"下拉一下请求第一页数据");
}此方法主要实现了“下拉刷新”操作
//刷新视图是否属于数据加载数据加载状态,返回值为NO,执行后续的操作,YES不执行后续操作
// 《《下拉/上拉 过程中一直被调用》》
- (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{
//NSLog(@"判断加载状态:%d",_isLoading);
return_isLoading;
}
//执行刷新方法后 调用此方法 《《下拉/上拉刷新完毕后调用》》
- (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{
NSLog(@"(刚开始/刷新后)给下拉页面date");
return [NSDatedate];
//返回当前系统时间 把时间放到下拉那个页面上。。。。。
}第五步
每次刷新 完成从服务器上请求完数据后,的调用下这个方法 有始有终吧(不然下拉刷新操作完后 弹不回去了)
[_refreshViewegoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];
可能是将tableview跟这个第三方库关联的,
当然了asi网络请求的代理方法 tableview的代理也的在这里配合一下 没写