今天做了一个下拉刷新的demo,主要用到了实现的开源框架是:https://github.com/enormego/EGOTableViewPullRefresh
运行结果如下:
实现很简单下载源代码,加压后把
然后拷贝资源文件和EGORefreshTableHeaderView.h和EGORefreshTableHeaderView.m到相依的工程中.
添加QuartzCore.framework组建:
在tableview所在的类中添加如下代码:
TableViewController.h
#import <UIKit/UIKit.h> #import "EGORefreshTableHeaderView.h" @interface TableViewController : UITableViewController<UITableViewDataSource,UITableViewDelegate,EGORefreshTableHeaderDelegate>{ BOOL isflage; BOOL _reloading; EGORefreshTableHeaderView *_refreshHeaderView; } @property (strong, nonatomic) IBOutlet UITableView *myTableView; //重新加载时调用的的方法 - (void)reloadTableViewDataSource; //完成加载时调用的方法 - (void)doneLoadingTableViewData; @end
TableViewController.m
// // TableViewController.m // EGOTableViewPullRefreshDemo // // Created by WildCat on 13-8-16. // Copyright (c) 2013年 wildcat. All rights reserved. // #import "TableViewController.h" @interface TableViewController () @end @implementation TableViewController @synthesize myTableView; - (id)initWithStyle:(UITableViewStyle)style { self = [super initWithStyle:style]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { if (_refreshHeaderView==nil) { //初始化下拉刷新空间 EGORefreshTableHeaderView *view1=[[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 10.0f-self.myTableView.bounds.size.height, self.myTableView.bounds.size.width, self.view.bounds.size.height)]; view1.delegate = self; [self.myTableView addSubview:view1]; _refreshHeaderView = view1; } [_refreshHeaderView refreshLastUpdatedDate]; } - (void)viewDidUnload { [self setMyTableView:nil]; _refreshHeaderView=nil; [super viewDidUnload]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait); } #pragma mark onClick -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { isflage=!isflage; [super.navigationController setNavigationBarHidden:isflage animated:TRUE]; [super.navigationController setToolbarHidden:isflage animated:TRUE]; } #pragma mark - Table view data source -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ return [NSString stringWithFormat:@"标题"]; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 10; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"MyCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell==nil) { cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } cell.textLabel.text=[NSString stringWithFormat:@"这是第 %i 行",indexPath.row]; return cell; } #pragma mark - Table view delegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // Navigation logic may go here. Create and push another view controller. /* <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil]; // ... // Pass the selected object to the new view controller. [self.navigationController pushViewController:detailViewController animated:YES]; */ } #pragma mark – #pragma mark Data Source Loading / Reloading Methods //重新加载时调用 - (void)reloadTableViewDataSource{ NSLog(@"==开始加载数据"); _reloading = YES; } //完成加载时调用的方法 - (void)doneLoadingTableViewData{ NSLog(@"===加载完数据"); _reloading = NO; [_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.myTableView]; } #pragma mark – #pragma mark UIScrollViewDelegate Methods //滚动控件时的委托方法 - (void)scrollViewDidScroll:(UIScrollView *)scrollView{ [_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView]; } - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ [_refreshHeaderView egoRefreshScrollViewDidEndDragging:scrollView]; } #pragma mark – #pragma mark EGORefreshTableHeaderDelegate Methods //下拉被调用的委托方法 - (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{ [self reloadTableViewDataSource]; [self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:3.0]; } //放回当前是刷新还是无刷新状态 - (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{ return _reloading; } //返回刷新时间的回调方法 - (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{ return [NSDate date]; } @end
这样就可以成功运行了,如果想把加载改为汉语可以在:
EGORefreshTableHeaderView.m源码中的
- (void)setState:(EGOPullRefreshState)aState函数的相应位置修改:
- (void)setState:(EGOPullRefreshState)aState{ switch (aState) { case EGOOPullRefreshPulling: _statusLabel.text = NSLocalizedString(@"松开可以刷新...", @"Release to refresh status"); [CATransaction begin]; [CATransaction setAnimationDuration:FLIP_ANIMATION_DURATION]; _arrowImage.transform = CATransform3DMakeRotation((M_PI / 180.0) * 180.0f, 0.0f, 0.0f, 1.0f); [CATransaction commit]; break; case EGOOPullRefreshNormal: if (_state == EGOOPullRefreshPulling) { [CATransaction begin]; [CATransaction setAnimationDuration:FLIP_ANIMATION_DURATION]; _arrowImage.transform = CATransform3DIdentity; [CATransaction commit]; } _statusLabel.text = NSLocalizedString(@"下拉刷新...", @"Pull down to refresh status"); [_activityView stopAnimating]; [CATransaction begin]; [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; _arrowImage.hidden = NO; _arrowImage.transform = CATransform3DIdentity; [CATransaction commit]; [self refreshLastUpdatedDate]; break; case EGOOPullRefreshLoading: _statusLabel.text = NSLocalizedString(@"加载中...", @"Loading Status"); [_activityView startAnimating]; [CATransaction begin]; [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; _arrowImage.hidden = YES; [CATransaction commit]; break; default: break; } _state = aState; }