下拉刷新实现步骤如下:
1.下载EGORefreshTableHeaderView源码(下面的Demo链接中有);
2.将源码拽入工程中,引入框架:QuartzCore.framework,还有引入箭头资源图片(Demo中有,你也可以自己做):
;
不引入图片下拉不会有箭头显示的。
3.新建一个控制器类实现下拉刷新,类继承于UITableViewController。
4.初始化下拉刷新的视图:
refreshView = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height, self.view.frame.size.width, self.tableView.bounds.size.height)];
refreshView.delegate = self;
//下拉刷新的控件添加在tableView上
[self.tableView addSubview:refreshView];
5.下拉刷新的代理方法,注释如下:
#pragma mark - EGORefreshTableHeaderDelegate
//出发下拉刷新动作,开始拉取数据
- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view
{
[self reloadData];
}
//返回当前刷新状态:是否在刷新
- (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view
{
return reloading;
}
//返回刷新时间
-(NSDate *)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView *)view
{
return [NSDate date];
}
下面是请求数据的函数reloadData实现:
//请求数据
-(void)reloadData
{
reloading = YES;
//新建一个线程来加载数据
[NSThread detachNewThreadSelector:@selector(requestData)
toTarget:self
withObject:nil];
}
-(void)requestData
{
NSArray *arr = @[@"柳眉",@"李倩梅"];
[self.dataArr addObjectsFromArray:arr];
sleep(3);
//在主线程中刷新UI
[self performSelectorOnMainThread:@selector(reloadUI)
withObject:nil
waitUntilDone:NO];
}
dataArr是表格的数据源。数据请求完毕之后就要刷新界面,实现与注释如下所示:
-(void)reloadUI
{
reloading = NO;
//停止下拉的动作,恢复表格的便宜
[refreshView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];
//更新界面
[self.tableView reloadData];
}
另外还要实现UIScrollview的两个代理,注释已写明:
#pragma mark - UIScrollView
//此代理在scrollview滚动时就会调用
//在下拉一段距离到提示松开和松开后提示都应该有变化,变化可以在这里实现
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[refreshView egoRefreshScrollViewDidScroll:scrollView];
}
//松开后判断表格是否在刷新,若在刷新则表格位置偏移,且状态说明文字变化为loading...
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
[refreshView egoRefreshScrollViewDidEndDragging:scrollView];
}
好了,到这里我们就基本实现了下拉刷新,还有表格的代理我就不写了,需要demo可以去这里下载(如果有错误,欢迎指正,大家共同学习):