首先,用到一个开源框架,可以去https://github.com/enormego/EGOTableViewPullRefresh下载。
然后,将里面的EGORefreshTableHeaderView.h和EGORefreshTableHeaderView.m拷到相应的项目里,在需要下拉刷新的页面对应的视图控制器中添加以下代码。
头文件:
#import "EGORefreshTableHeaderView.h" @interface RootViewController : UITableViewController <EGORefreshTableHeaderDelegate, UITableViewDelegate, UITableViewDataSource>{ EGORefreshTableHeaderView *_refreshHeaderView; BOOL _reloading; } - (void)reloadTableViewDataSource; - (void)doneLoadingTableViewData; @end
实现文件:
#import "RootViewController.h" @implementation RootViewController - (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]; } [_refreshHeaderView refreshLastUpdatedDate]; } #pragma mark - #pragma mark UITableViewDataSource - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 10; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 4; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } return cell; } - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ return [NSString stringWithFormat:@"Section %i", section]; } #pragma mark - #pragma mark Data Source Loading / Reloading Methods - (void)reloadTableViewDataSource{ _reloading = YES; } - (void)doneLoadingTableViewData{ _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; } - (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{ return [NSDate date]; } #pragma mark - #pragma mark Memory Management - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } - (void)viewDidUnload { _refreshHeaderView=nil; } - (void)dealloc { _refreshHeaderView = nil; [super dealloc]; } @end
最后,一个很重要的步骤,别忘了加入QuartzCore.framework框架。
上文的实现中有个这样的方法:
- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{ [self reloadTableViewDataSource]; [self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:3.0]; }
显然,这是有问题的。当触发刷新的时候,我们需要和服务端进行交互,这时就会执行这个代理方法,首先调用了reloadTableViewDataSource,表示要和服务端进行交互了,此时_reloading值为YES,3秒后又调用了doneLoadingTableViewData,从而结束刷新效果的显示,我们实际上是假设这时候服务端已经正常将数据发送到客户端来了。事实上,实际收到服务端的数据所用的时间是不确定的,所以,应该在数据返回后再结束刷新效果。
- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{ [self reloadTableViewDataSource]; //发送异步请求的代码 } - (void)requestFinished:(ASIHTTPRequest *)request { [self doneLoadingTableViewData]; }
相关推荐
使用EGOTableViewPullRefresh开源项目在IOS中实现UITableView的下拉刷新功能,对源码进行了一些改动,支持中英文显示,刷新时间格式也做了修改
Android下拉刷新实现一。使用组合View的方式,先自定义一个布局继承自LinearLayout,然后在这个布局中加入下拉头和ListView这两个子元素,并让这两个子元素纵向排列。初始化的时候,让下拉头向上偏移出屏幕,这样...
android 下拉刷新实现原理,网上找的很详细的说明。
HarmonyOS应用开发-下拉刷新实现
Android开发上拉加载下拉刷新实现
下拉刷新,含ListView scrollView,WebView
一个类似微信信息界面的下拉刷新,Demo中的实现方案经过测试可以使用
简单实现安卓开发的上拉加载下拉刷新
用最简单的方法实现了上拉加载下拉刷新。 不信自己下载看去。
iscroll5的下拉实现,修改了iscroll-zoom.js(在原有版本上多了缩放功能的版本)的部分代码,具体修改可见http://www.duanzhihe.com/1045.html。欢迎再交流与讨论
5种uni-app 页面下拉刷新方法-源码示例
上拉加载更多,下拉刷新,思路解析,已实现最基本的功能。
实现了ListView对数据的加载和刷新操作
仿QQ下拉刷新 实现原理比较简单,可以直接运行看到效果
最近项目中需要用到ListView下拉刷新的功能,一开始想图省事,在网上直接找一个现成的,...因此我也是放弃了在网上找现成代码的想法,自己花功夫编写 了一种非常简单的下拉刷新实现方案,现在拿出来和大家分享一下。
仿网易新闻客户端下拉刷新 实现原理比较简单,可以直接运行看到效果
类似于新浪微博那种,实现ListView下拉更新内容
项目中用到下拉刷新,找了很多资料对比然后选中iscroll,最后根据demo做了些和项目相关的改进,现在把这一块单独提出来,分享给大家
下拉刷新与上拉加载在使用列表组件展示数据的时候,更新数据的交互曾经是一个没有定论的问题,有留一个刷新按钮的,有按时自动刷新的
开发中,有时列表使用来实现滚动效果,然而在实现上拉加载,下拉刷新 的时候,希望可以在中来实现拖拽效果,而不是使用wx.startPullDownRefresh()去展示整个页面的拖拽。 这里选择使用 bindtouchstart ...