刚好有时间为了不让自己无聊,写点东西好了。。。
经常用到EGO这个框架来做下拉刷新的功能,记录一下,分享一下,顺便自己也加深下印象 。
废话不说了,开始吧。
首先要引入EGO的文件 ,
.h 文件中引入委托,我的.h里面是这样的。
@interface FirstViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,EGORefreshTableDelegate>
{
//下拉刷新
EGORefreshTableHeaderView *_refreshHeaderView;
BOOL _reloading;
}
//开始重新加载时调用的方法
- (void)reloadTableViewDataSource;
//完成加载时调用的方法
- (void)doneLoadingTableViewData;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self bulidUI];
if (_refreshHeaderView==nil) {
//初始化下拉刷新
EGORefreshTableHeaderView *refreshView = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.table.bounds.size.height, self.view.frame.size.width, self.table.bounds.size.height)];
//将刷新空间添加到自己的table上面
[self.table addSubview:refreshView];
_refreshHeaderView = refreshView;
}
//重新加载表格数据
[self.table reloadData];
}
//开始重新加载时调用的方法
- (void)reloadTableViewDataSource{
_reloading = YES;
//开始刷新后执行后台线程,在此之前可以开启HUD或其他对UI进行阻塞
[NSThread detachNewThreadSelector:@selector(doInBackground) toTarget:self withObject:nil];
}
//完成加载时调用的方法
-(void)doneLoadingTableViewData{
NSLog(@"doneLoadingTableViewData");
_reloading = NO;
[_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.table];
//刷新表格内容
[self.table reloadData];
}
//这个方法运行于子线程中,完成获取刷新数据的操作
-(void)doInBackground
{
NSLog(@"doInBackground");
NSArray *dataArray2 = [NSArray arrayWithObjects:@"Ryan2",@"Vivi2", nil];
self.ListArr = dataArray2;
[NSThread sleepForTimeInterval:3];
//后台操作线程执行完后,到主线程更新UI
[self performSelectorOnMainThread:@selector(doneLoadingTableViewData) withObject:nil waitUntilDone:YES];
}
#pragma mark - #pragma mark EGORefreshTableHeaderDelegate Methods
//下拉被触发调用的委托方法
-(void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView *)view
{
NSLog(@"下拉刷新触发");
[self reloadTableViewDataSource];
}
//返回当前是刷新还是无刷新状态
-(BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView *)view
{
return _reloading;
}
//返回刷新时间的回调方法
-(NSDate *)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView *)view
{
return [NSDate date];
}
#pragma mark -
#pragma mark UIScrollViewDelegate Methods
//滚动控件的委托方法
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView];
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
[_refreshHeaderView egoRefreshScrollViewDidEndDragging:scrollView];
}