在使用下拉刷新类库EGORefreshTableHeaderView的时候,将资源文件添加到工程中,也不要忘记添加QuartzCore.framework框架。
我们用到一个EGOTableViewPullRefresh的开源项目来实现这个功能,先到这里下载源码,下载完成后里面有个Demo是可以直接运行的Xcode工程,然后就是这个开源项目的源码,学习如何使用可以参照Demo。
1.
打开MainViewController.xib文件然后拖入一个UITableViewController并连接DataSource和Delegate,然后在MainViewController.h文件中声明UITableView的协议。
#import #import "EGORefreshTableHeaderView.h" @interface MainViewController : UITableViewController { EGORefreshTableHeaderView *_refreshTableView; BOOL _reloading; } @property (strong,nonatomic) NSArray *array; //开始重新加载时调用的方法 - (void)reloadTableViewDataSource; //完成加载时调用的方法 - (void)doneLoadingTableViewData; @end
2.
#import "MainViewController.h" @interface MainViewController () @end @implementation MainViewController @synthesize array = _array; #pragma mark - #pragma mark View life cycle -(void)viewDidLoad { [super viewDidLoad]; //设置导航条标题 self.navigationItem.title = @"Pull Refresh"; if (_refreshTableView == nil) { //初始化下拉刷新控件 EGORefreshTableHeaderView *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; //将下拉刷新控件作为子控件添加到UITableView中 [self.tableView addSubview:refreshView]; _refreshTableView = refreshView; } //初始化用于填充表格的数据 NSArray *dataArray = [NSArray arrayWithObjects:@"Ryan",@"Vivi", nil]; self.array = dataArray; //重新加载表格数据 [self.tableView reloadData]; } -(void)viewDidUnload { [super viewDidUnload]; _refreshTableView = nil; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait); } # pragma mark - # pragma mark UITableViewDataSource Methods -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 10; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [self.array count]; } //带头标题的表格设置标题方法 -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { return [NSString stringWithFormat:@"Title %d",section + 1]; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"CellIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } cell.textLabel.text = [self.array objectAtIndex:indexPath.row]; return cell; } #pragma mark - #pragma mark Data Source Loading / Reloading Methods //开始重新加载时调用的方法 - (void)reloadTableViewDataSource{ _reloading = YES; //开始刷新后执行后台线程,在此之前可以开启HUD或其他对UI进行阻塞 [NSThread detachNewThreadSelector:@selector(doInBackground) toTarget:self withObject:nil]; } //完成加载时调用的方法 - (void)doneLoadingTableViewData{ NSLog(@"doneLoadingTableViewData"); _reloading = NO; [_refreshTableView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView]; //刷新表格内容 [self.tableView reloadData]; } #pragma mark - #pragma mark Background operation //这个方法运行于子线程中,完成获取刷新数据的操作 -(void)doInBackground { NSLog(@"doInBackground"); NSArray *dataArray2 = [NSArray arrayWithObjects:@"Ryan2",@"Vivi2", nil]; self.array = dataArray2; [NSThread sleepForTimeInterval:3]; //后台操作线程执行完后,到主线程更新UI [self performSelectorOnMainThread:@selector(doneLoadingTableViewData) withObject:nil waitUntilDone:YES]; } #pragma mark - #pragma mark EGORefreshTableHeaderDelegate Methods //下拉被触发调用的委托方法 -(void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView *)view { [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 { [_refreshTableView egoRefreshScrollViewDidScroll:scrollView]; } -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { [_refreshTableView egoRefreshScrollViewDidEndDragging:scrollView]; } @end