下拉刷新实现步骤如下:
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]; }
//请求数据 -(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]; }
-(void)reloadUI { reloading = NO; //停止下拉的动作,恢复表格的便宜 [refreshView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView]; //更新界面 [self.tableView reloadData]; }
#pragma mark - UIScrollView //此代理在scrollview滚动时就会调用 //在下拉一段距离到提示松开和松开后提示都应该有变化,变化可以在这里实现 -(void)scrollViewDidScroll:(UIScrollView *)scrollView { [refreshView egoRefreshScrollViewDidScroll:scrollView]; } //松开后判断表格是否在刷新,若在刷新则表格位置偏移,且状态说明文字变化为loading... -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { [refreshView egoRefreshScrollViewDidEndDragging:scrollView]; }
下拉刷新Demo(请猛击这里)