此代码来自Enormego 团队,一个来自美国的天才、热心的开发团队。
在自己工程中的引用步骤:
一、 从上面的链接下载资源文件,将EGORefreshTableHeaderView.h
、EGORefreshTableHeaderView.m
两个文件,以及Enormego提供的那一套图片包拖进你的工程里。
二、找到你的 UITableViewController 的 .h 文件,添加相应的代码:
- #import "EGORefreshTableHeaderView.h"
- @interface RootViewController : UITableViewController {
- EGORefreshTableHeaderView *_refreshHeaderView;
- // Reloading var should really be your tableviews datasource
- // Putting it here for demo purposes
- BOOL _reloading;
- }
- - (void)reloadTableViewDataSource;
- - (void)doneLoadingTableViewData;
- @end
#import "EGORefreshTableHeaderView.h"
@interface RootViewController : UITableViewController {
EGORefreshTableHeaderView *_refreshHeaderView;
// Reloading var should really be your tableviews datasource
// Putting it here for demo purposes
BOOL _reloading;
}
- (void)reloadTableViewDataSource;
- (void)doneLoadingTableViewData;
@end
三、切换到你的 UITableViewController 的 .m 文件,添加相应的代码:
- - (void)viewDidLoad {
- [super viewDidLoad];
- if (_refreshHeaderView == nil) {
- EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height, self.view.frame.size.width, self.tableView.bounds.size.height)];
- view.delegate = self;
- [self.tableView addSubview:view];
- _refreshHeaderView = view;
- [view release];
- }
- // update the last update date
- [_refreshHeaderView refreshLastUpdatedDate];
- }
- (void)viewDidLoad {
[super viewDidLoad];
if (_refreshHeaderView == nil) {
EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height, self.view.frame.size.width, self.tableView.bounds.size.height)];
view.delegate = self;
[self.tableView addSubview:view];
_refreshHeaderView = view;
[view release];
}
// update the last update date
[_refreshHeaderView refreshLastUpdatedDate];
}
- #pragma mark -
- #pragma mark Data Source Loading / Reloading Methods
- - (void)reloadTableViewDataSource{
- // should be calling your tableviews data source model to reload
- // put here just for demo
- _reloading = YES;
- }
- - (void)doneLoadingTableViewData{
- // model should call this when its done loading
- _reloading = NO;
- [_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];
- }
- #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; // should return if data source model is reloading
- }
- - (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{
- return [NSDate date]; // should return date data source was last changed
- }
#pragma mark -
#pragma mark Data Source Loading / Reloading Methods
- (void)reloadTableViewDataSource{
// should be calling your tableviews data source model to reload
// put here just for demo
_reloading = YES;
}
- (void)doneLoadingTableViewData{
// model should call this when its done loading
_reloading = NO;
[_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];
}
#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; // should return if data source model is reloading
}
- (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{
return [NSDate date]; // should return date data source was last changed
}
四、最后呢,别忘了内存管理习惯:
- - (void)viewDidUnload {
- _refreshHeaderView=nil;
- }
- - (void)dealloc {
- _refreshHeaderView = nil;
- [super dealloc];
- }
- (void)viewDidUnload {
_refreshHeaderView=nil;
}
- (void)dealloc {
_refreshHeaderView = nil;
[super dealloc];
}
五、编译你的工程,打开 simulator ,看看效果吧。包你满意。
效果图: