如今,下拉刷新与上拉加载越来越流行了,你做个应用要是没有这个功能,都不好意思拿出手,苹果SDK顺应大流推出了下拉刷新功能,感觉不是很好用。而且也没有加载更多方法,第三方库给我提供了很好的解决方案。如EGOTableViewPullRefresh。
将该库复制到项目目录下
导入头文件和代理 EGORefreshTableHeaderDelegate
#import "EGORefreshTableHeaderView.h"
声明一些变量用来布局和控制刷新:
UITableView *_tableView;
NSMutableArray *_dataArray;
//是否可以刷新
BOOL _isRefresh;
//关键,刷新控制器
EGORefreshTableHeaderView *_refreshView;
在- (void)viewDidLoad 方法里进行初始化
_dataArray = [[NSMutableArray alloc]init];
_tableView = [[UITableView alloc]initWithFrame:
CGRectMake(0, 0, 320, self.view.frame.size.height-64-49)];
self.automaticallyAdjustsScrollViewInsets = NO;
_tableView.dataSource = self;
_tableView.delegate = self;
[self.view addSubview:_tableView];
_refreshView = [[EGORefreshTableHeaderView alloc]
initWithFrame:CGRectMake(0, -460, 320, 460)];
_refreshView.delegate = self;
[_tableView addSubview:_refreshView];
实现代理方法:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 90;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _dataArray.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
return nil;
}
//tableView的代理方法
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[_refreshView egoRefreshScrollViewDidScroll:_tableView];
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
[_refreshView egoRefreshScrollViewDidEndDragging:_tableView];
}
#pragma mark -
#pragma mark EgoRefresh的代理方法
//更新时间
-(NSDate *)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView *)view
{
return [NSDate date];
}
//是否可以刷新
-(BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView *)view
{
return _isRefresh;
}
//触发方法
-(void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView *)view
{
_isRefresh = YES;
[self pullDownRefresh];//调用刷新方法
}
//刷新处理
-(void)pullDownRefresh
{
//1.开始网络请求(因为是更新,所以接口不用变),将_dataArray里面的数据清空
//2.请求的数据保存在_dataArray里面,并重新加载_tableView
//3.调用endPullDownRefresh方法,停止刷新
}
//结束下拉刷新
-(void)endPullDownRefresh
{
[_refreshView egoRefreshScrollViewDataSourceDidFinishedLoading:_tableView];
_isRefresh = NO;
}
之所以能下拉刷新,关键就在于这两个方法
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[_refreshView egoRefreshScrollViewDidScroll:_tableView];
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
[_refreshView egoRefreshScrollViewDidEndDragging:_tableView];
}
这两个方法将tableView的实时偏移传给refreshView。当偏移达到一定距离就开始刷新