IOS开发笔记(2)EGOTableViewPullRefresh实现列表的下拉刷新功能
2014-08-26 15:17
836 查看
http://blog.csdn.net/xiaofansong/article/details/8260258
现在流行的列表上拉刷新基本上都是使用的EGOTableViewPullRefresh开源的类库。
1、到github上下载EGOTableViewPullRefresh
https://github.com/enormego/EGOTableViewPullRefresh
2、下载后的文件夹中包含以下内容
将EGOTableViewPullRefresh中的Resources文件夹中的所有图片全部都拷贝到自己的工程的Resources文件夹下,这些图片是下拉箭头及tableView的headerView的背景图片。在EGOTableViewPullRefresh文件夹下的Classes文件夹下的View文件夹下有两个文件,分别是EGORefreshTableHeaderView.h和EGORefreshTableHeaderView.m文件,将这两个文件放到自己的工程下。到此为止准备工作就做完了。
3、下拉是一个刷新的工作,所以需要我们添加的代码无非就是数据刷新的代码。
(1)在.h文件中添加如下代码
[plain]
view plaincopyprint?
#import "EGORefreshTableHeaderView.h" @interface RootViewController : UITableViewController <EGORefreshTableHeaderDelegate, UITableViewDelegate, UITableViewDataSource>{ EGORefreshTableHeaderView *_refreshHeaderView; // Reloading var should really be your tableviews datasource // Putting it here for demo purposes BOOL _reloading; } - (void)reloadTableViewDataSource; - (void)doneLoadingTableViewData;
(2)在- (void)viewDidLoad函数中添加下面的代码。
[plain]
view plaincopyprint?
if (_refreshHeaderView == nil) { EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame: CGRectMake(0.0f, self.tableView.contentSize.height, 320, 650)]; NSLog(@"%@", NSStringFromCGRect( view.frame )); view.delegate = self; [self.tableView addSubview:view]; _refreshHeaderView = view; [view release]; } // update the last update date [_refreshHeaderView refreshLastUpdatedDate];
(3)在对应的.m文件中添加如下方法
[plain]
view plaincopyprint?
#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:4.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 }
4、总结
A:这个是在底部加刷新。如果在顶部加刷新那么只要修改下ViewDidload的创建代码
[plain]
view plaincopyprint?
EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, -320.0f, self.view.frame.size.width, 320)];
B:如果想同时在顶部或者底部都加上刷新,可以参考我另外一个帖子(关于糗百,开发笔记一里面所使用的方法)
C:如果想实现在列表最后一行实现点击查询,那么可以在列表下多加一行,自己写一个类继承UItableviewcell,然后在点击事件里面做一个判断。
D:假如遇到数据刷新之后那个顶部的view还在刷新,这个可能是egoRefreshTableHeaderDidTriggerRefresh里面同步执行的代码
[plain]
view plaincopyprint?
- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView *)view { [self reloadTableViewDataSource]; [self performSelector:@selector(refresh) withObject:nil afterDelay:2.0f]; // [self refresh]; }
这里读取数据的操作必须是异步的,要不然和tableView下拉再上弹这个动作会有很明显的延迟。
http://blog.csdn.net/xiaofansong/article/details/8260258
现在流行的列表上拉刷新基本上都是使用的EGOTableViewPullRefresh开源的类库。
1、到github上下载EGOTableViewPullRefresh
https://github.com/enormego/EGOTableViewPullRefresh
2、下载后的文件夹中包含以下内容
将EGOTableViewPullRefresh中的Resources文件夹中的所有图片全部都拷贝到自己的工程的Resources文件夹下,这些图片是下拉箭头及tableView的headerView的背景图片。在EGOTableViewPullRefresh文件夹下的Classes文件夹下的View文件夹下有两个文件,分别是EGORefreshTableHeaderView.h和EGORefreshTableHeaderView.m文件,将这两个文件放到自己的工程下。到此为止准备工作就做完了。
3、下拉是一个刷新的工作,所以需要我们添加的代码无非就是数据刷新的代码。
(1)在.h文件中添加如下代码
[plain]
view plaincopyprint?
#import "EGORefreshTableHeaderView.h" @interface RootViewController : UITableViewController <EGORefreshTableHeaderDelegate, UITableViewDelegate, UITableViewDataSource>{ EGORefreshTableHeaderView *_refreshHeaderView; // Reloading var should really be your tableviews datasource // Putting it here for demo purposes BOOL _reloading; } - (void)reloadTableViewDataSource; - (void)doneLoadingTableViewData;
#import "EGORefreshTableHeaderView.h" @interface RootViewController : UITableViewController <EGORefreshTableHeaderDelegate, UITableViewDelegate, UITableViewDataSource>{ EGORefreshTableHeaderView *_refreshHeaderView; // Reloading var should really be your tableviews datasource // Putting it here for demo purposes BOOL _reloading; } - (void)reloadTableViewDataSource; - (void)doneLoadingTableViewData;
(2)在- (void)viewDidLoad函数中添加下面的代码。
[plain]
view plaincopyprint?
if (_refreshHeaderView == nil) { EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame: CGRectMake(0.0f, self.tableView.contentSize.height, 320, 650)]; NSLog(@"%@", NSStringFromCGRect( view.frame )); view.delegate = self; [self.tableView addSubview:view]; _refreshHeaderView = view; [view release]; } // update the last update date [_refreshHeaderView refreshLastUpdatedDate];
if (_refreshHeaderView == nil) { EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame: CGRectMake(0.0f, self.tableView.contentSize.height, 320, 650)]; NSLog(@"%@", NSStringFromCGRect( view.frame )); view.delegate = self; [self.tableView addSubview:view]; _refreshHeaderView = view; [view release]; } // update the last update date [_refreshHeaderView refreshLastUpdatedDate];
(3)在对应的.m文件中添加如下方法
[plain]
view plaincopyprint?
#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:4.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:4.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 }
4、总结
A:这个是在底部加刷新。如果在顶部加刷新那么只要修改下ViewDidload的创建代码
[plain]
view plaincopyprint?
EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, -320.0f, self.view.frame.size.width, 320)];
EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, -320.0f, self.view.frame.size.width, 320)];
B:如果想同时在顶部或者底部都加上刷新,可以参考我另外一个帖子(关于糗百,开发笔记一里面所使用的方法)
C:如果想实现在列表最后一行实现点击查询,那么可以在列表下多加一行,自己写一个类继承UItableviewcell,然后在点击事件里面做一个判断。
D:假如遇到数据刷新之后那个顶部的view还在刷新,这个可能是egoRefreshTableHeaderDidTriggerRefresh里面同步执行的代码
[plain]
view plaincopyprint?
- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView *)view { [self reloadTableViewDataSource]; [self performSelector:@selector(refresh) withObject:nil afterDelay:2.0f]; // [self refresh]; }
- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView *)view { [self reloadTableViewDataSource]; [self performSelector:@selector(refresh) withObject:nil afterDelay:2.0f]; // [self refresh]; }
这里读取数据的操作必须是异步的,要不然和tableView下拉再上弹这个动作会有很明显的延迟。
相关文章推荐
- iPhone开发笔记(17)使用EGOTableViewPullRefresh实现列表的下拉刷新功能
- IOS学习笔记34—EGOTableViewPullRefresh实现下拉刷新
- IOS学习笔记34—EGOTableViewPullRefresh实现下拉刷新
- 详解iOS开发中UItableview控件的数据刷新功能的实现
- iOS 上拉刷新和下拉加在更多(第三方框架EGOTableViewPullRefresh)
- 开源中国iOS客户端学习——(二)下拉刷新特效EGOTableViewPullRefresh
- IOS学习笔记34—EGOTableViewPullRefresh实现下拉刷新
- IOS学习笔记之EGOTableViewPullRefresh实现下拉刷新
- IOS学习笔记34—EGOTableViewPullRefresh实现下拉刷新
- 开源中国iOS客户端学习——(二)下拉刷新特效EGOTableViewPullRefresh
- 使用UItableview在iOS应用开发中实现好友列表功能
- 实现app上对csdn的文章列表上拉刷新下拉加载以及加入缓存文章列表的功能 (制作csdn app 四)
- iOS开发_iphone开发_iphone界面如何实现下拉列表
- Iphone开发(十四)深入理解scrollView的contentOffset等属性,实现下拉刷新功能
- 应用第三方库EGORefreshTableHeaderView实现下拉刷新功能
- iOS开发_iphone开发_iphone界面怎么实现下拉列表
- IOS开发简单登录LoginViewController、注册RegisterViewController、UcenterViewController功能实现方法
- iOS开发_iphone开发_iphone界面如何实现下拉列表
- 【IOS功能实现】之:下拉列表
- 实现app上对csdn的文章列表上拉刷新下拉加载以及加入缓存文章列表的功能 (制作csdn app 四)