UITableView下拉刷新页面的实现(有框架)

来源:互联网 发布:演出音频软件 编辑:程序博客网 时间:2024/06/07 14:55

以前看到facebook,人人和其他的一些应用,很多都使用了下拉列表,列表就重新加载数据的应用.感觉用户体验很好,但是一直没有时间找相应的解决方法,今天终于有时间整理一下代码:

下图是实现的效果图,当用户下拉列表的时候,就出现向上的箭头.

实现的开源框架是:https://github.com/enormego/EGOTableViewPullRefresh

实现过程很简单,下载相应的demo,然后拷贝资源文件和EGORefreshTableHeaderView.h和EGORefreshTableHeaderView.m到相依的工程中.在table所在的类中添加如下代码:

viewplaincopyto clipboardprint?
  1. #import <UIKit/UIKit.h>   
  2. #import "EGORefreshTableHeaderView.h"   
  3. @interface iphone_navtaViewController UIViewController   
  4. <UITableViewDelegate,UITableViewDataSource,EGORefreshTableHeaderDelegate>{   
  5.     BOOL isflage;   
  6.     IBOutlet UITableView *myTableView;   
  7.    EGORefreshTableHeaderVie*_refreshHeaderView;   
  8.     BOOL _reloading;   
  9.   
  10. @property (nonatomic,retain) UITableView *myTableView;   
  11. (void)reloadTableViewDataSource;   
  12. (void)doneLoadingTableViewData  
  13. @end  
 

实现方法:

viewplaincopyto clipboardprint?
  1. #import "iphone_navtaViewController.h"   
  2. @implementation iphone_navtaViewController   
  3. @synthesize myTableView;   
  4. (void)viewDidLoad   
  5.     [super viewDidLoad];   
  6.     if (_refreshHeaderView == nil)   
  7.         EGORefreshTableHeaderVie*view1 [[EGORefreshTableHeaderViealloc] initWithFrame:CGRectMake(0.0f, 10.0f – self.myTableView.bounds.size.height, self.myTableView.frame.size.width, self.view.bounds.size.height)];   
  8.         view1.delegate self;   
  9.         [self.myTableView addSubview:view1];   
  10.         _refreshHeaderView view1;   
  11.         [view1 release];   
  12.       
  13.     [_refreshHeaderView refreshLastUpdatedDate];   
  14.   
  15. (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation   
  16.     return (interfaceOrientation == UIInterfaceOrientationPortrait);   
  17.   
  18. (void)didReceiveMemoryWarning   
  19.     [super didReceiveMemoryWarning];   
  20.   
  21. (void)viewDidUnload   
  22.     self.myTableView=nil;   
  23.     _refreshHeaderView=nil;   
  24.   
  25. (void)dealloc   
  26.     _refreshHeaderView=nil;   
  27.     [self.myTableView release];   
  28.     [super dealloc];   
  29.   
  30. #pragma mark –   
  31. #pragma mark onClick   
  32. -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event   
  33.   
  34.       isflage=!isflage;   
  35.     [super.navigationController setNavigationBarHidden:isflage animated:TRUE];  
  36.     [super.navigationController setToolbarHidden:isflage animated:TRUE];   
  37.   
  38. #pragma mark –   
  39. #pragma mark UITableView   
  40. (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView   
  41.     return 1;   
  42.   
  43. (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section   
  44.     return 3;   
  45.   
  46. (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath   
  47.     UITableViewCell* cell [tableView dequeueReusableCellWithIdentifier:@"tag"];   
  48.     if (cell==nil)   
  49.         cell [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle   
  50.                                        reuseIdentifier:@"tag"autorelease];   
  51.       
  52.     //表格设计   
  53.     return cell;   
  54.   
  55. -(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath   
  56.   
  57.     return 100;   
  58.  
  59. #pragma mark –   
  60. #pragma mark Data Source Loading Reloading Methods  
  61. (void)reloadTableViewDataSource{   
  62.     NSLog(@"==开始加载数据");   
  63.     _reloading YES;   
  64.  
  65. (void)doneLoadingTableViewData  
  66.     NSLog(@"===加载完数据");   
  67.     _reloading NO;   
  68.     [_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.myTableView];   
  69.   
  70. #pragma mark –   
  71. #pragma mark UIScrollViewDelegate Methods   
  72. (void)scrollViewDidScroll:(UIScrollView *)scrollView{      
  73.     [_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView];   
  74.  
  75. (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{   
  76.     [_refreshHeaderView egoRefreshScrollViewDidEndDragging:scrollView];   
  77.   
  78. #pragma mark –   
  79. #pragma mark EGORefreshTableHeaderDelegate Methods   
  80. (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{   
  81.     [self reloadTableViewDataSource];   
  82.     [self performSelector:@selector(doneLoadingTableViewDatawithObject:nil afterDelay:3.0];   
  83.  
  84. (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{   
  85.     return _reloading;   
  86.   
  87. (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{   
  88.     return [NSDate date];       
  89.   
  90. @end  
 

一个最重要的步骤,就是要添加QuartzCore.framework组建。

然后运行即可