代码改变世界

IOS学习之路十二(UITableView下拉刷新页面)

2013-09-05 22:26  Lves Li  阅读(1599)  评论(0编辑  收藏  举报

今天做了一个下拉刷新的demo,主要用到了实现的开源框架是:https://github.com/enormego/EGOTableViewPullRefresh

运行结果如下:

 

实现很简单下载源代码,加压后把

然后拷贝资源文件和EGORefreshTableHeaderView.h和EGORefreshTableHeaderView.m到相依的工程中.

添加QuartzCore.framework组建:

在tableview所在的类中添加如下代码:

TableViewController.h
 
  1. #import <UIKit/UIKit.h>  
  2. #import "EGORefreshTableHeaderView.h"  
  3.   
  4. @interface TableViewController : UITableViewController<UITableViewDataSource,UITableViewDelegate,EGORefreshTableHeaderDelegate>{  
  5.     BOOL isflage;  
  6.     BOOL _reloading;  
  7.     EGORefreshTableHeaderView *_refreshHeaderView;  
  8.       
  9. }  
  10. @property (strong, nonatomic) IBOutlet UITableView *myTableView;  
  11. //重新加载时调用的的方法  
  12. - (void)reloadTableViewDataSource;  
  13. //完成加载时调用的方法  
  14. - (void)doneLoadingTableViewData;  
  15. @end  


 
 
TableViewController.m

 

  1. //  
  2. //  TableViewController.m  
  3. //  EGOTableViewPullRefreshDemo  
  4. //  
  5. //  Created by WildCat on 13-8-16.  
  6. //  Copyright (c) 2013年 wildcat. All rights reserved.  
  7. //  
  8.   
  9. #import "TableViewController.h"  
  10.   
  11. @interface TableViewController ()<<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">EGORefreshTableHeaderDelegate</span>>  
  12.   
  13. @end  
  14.   
  15. @implementation TableViewController  
  16. @synthesize myTableView;  
  17.   
  18. - (id)initWithStyle:(UITableViewStyle)style  
  19. {  
  20.     self = [super initWithStyle:style];  
  21.     if (self) {  
  22.         // Custom initialization  
  23.     }  
  24.     return self;  
  25. }  
  26.   
  27. - (void)viewDidLoad  
  28. {  
  29.       
  30.         if (_refreshHeaderView==nil) {  
  31.             //初始化下拉刷新空间  
  32.             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)];  
  33.             view1.delegate = self;  
  34.             [self.myTableView addSubview:view1];  
  35.             _refreshHeaderView = view1;  
  36.         }  
  37.        
  38.     [_refreshHeaderView refreshLastUpdatedDate];  
  39. }  
  40.   
  41. - (void)viewDidUnload  
  42. {  
  43.     [self setMyTableView:nil];  
  44.     _refreshHeaderView=nil;   
  45.     [super viewDidUnload];  
  46.      
  47. }  
  48.   
  49. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation  
  50. {  
  51.     return (interfaceOrientation == UIInterfaceOrientationPortrait);  
  52. }  
  53. #pragma mark onClick  
  54. -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event  
  55. {  
  56.     isflage=!isflage;  
  57.     [super.navigationController setNavigationBarHidden:isflage animated:TRUE];  
  58.     [super.navigationController setToolbarHidden:isflage animated:TRUE];  
  59. }  
  60. #pragma mark - Table view data source  
  61. -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{  
  62.     return [NSString stringWithFormat:@"标题"];  
  63.   
  64. }  
  65. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView  
  66. {  
  67.     return 1;  
  68. }  
  69.   
  70. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section  
  71. {  
  72.   
  73.     return 10;  
  74. }  
  75.   
  76. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  
  77. {  
  78.     static NSString *CellIdentifier = @"MyCell";  
  79.     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];  
  80.       
  81.     if (cell==nil) {  
  82.         cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];  
  83.     }  
  84.     cell.textLabel.text=[NSString stringWithFormat:@"这是第 %i 行",indexPath.row];  
  85.     return cell;  
  86. }  
  87.   
  88.   
  89.   
  90. #pragma mark - Table view delegate  
  91.   
  92. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath  
  93. {  
  94.     // Navigation logic may go here. Create and push another view controller.  
  95.     /*  
  96.      <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];  
  97.      // ...  
  98.      // Pass the selected object to the new view controller.  
  99.      [self.navigationController pushViewController:detailViewController animated:YES];  
  100.      */  
  101. }  
  102. #pragma mark –  
  103. #pragma mark Data Source Loading / Reloading Methods  
  104. //重新加载时调用  
  105. - (void)reloadTableViewDataSource{  
  106.     NSLog(@"==开始加载数据");  
  107.     _reloading = YES;  
  108. }  
  109.   
  110. //完成加载时调用的方法  
  111.   
  112. - (void)doneLoadingTableViewData{  
  113.     NSLog(@"===加载完数据");  
  114.     _reloading = NO;  
  115.     [_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.myTableView];  
  116. }  
  117. #pragma mark –  
  118. #pragma mark UIScrollViewDelegate Methods  
  119. //滚动控件时的委托方法  
  120.   
  121. - (void)scrollViewDidScroll:(UIScrollView *)scrollView{  
  122.     [_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView];  
  123. }  
  124.   
  125. - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{  
  126.     [_refreshHeaderView egoRefreshScrollViewDidEndDragging:scrollView];  
  127. }  
  128. #pragma mark –  
  129. #pragma mark EGORefreshTableHeaderDelegate Methods  
  130. //下拉被调用的委托方法  
  131. - (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{  
  132.     [self reloadTableViewDataSource];  
  133.     [self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:3.0];  
  134. }  
  135. //放回当前是刷新还是无刷新状态  
  136. - (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{  
  137.     return _reloading;  
  138. }  
  139. //返回刷新时间的回调方法  
  140. - (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{  
  141.     return [NSDate date];  
  142. }  
  143. @end  

 

这样就可以成功运行了,如果想把加载改为汉语可以在:

EGORefreshTableHeaderView.m源码中的

- (void)setState:(EGOPullRefreshState)aState函数的相应位置修改:

 

  1. - (void)setState:(EGOPullRefreshState)aState{  
  2.       
  3.     switch (aState) {  
  4.         case EGOOPullRefreshPulling:  
  5.               
  6.             _statusLabel.text = NSLocalizedString(@"松开可以刷新...", @"Release to refresh status");  
  7.             [CATransaction begin];  
  8.             [CATransaction setAnimationDuration:FLIP_ANIMATION_DURATION];  
  9.             _arrowImage.transform = CATransform3DMakeRotation((M_PI / 180.0) * 180.0f, 0.0f, 0.0f, 1.0f);  
  10.             [CATransaction commit];  
  11.               
  12.             break;  
  13.         case EGOOPullRefreshNormal:  
  14.               
  15.             if (_state == EGOOPullRefreshPulling) {  
  16.                 [CATransaction begin];  
  17.                 [CATransaction setAnimationDuration:FLIP_ANIMATION_DURATION];  
  18.                 _arrowImage.transform = CATransform3DIdentity;  
  19.                 [CATransaction commit];  
  20.             }  
  21.               
  22.             _statusLabel.text = NSLocalizedString(@"下拉刷新...", @"Pull down to refresh status");  
  23.             [_activityView stopAnimating];  
  24.             [CATransaction begin];  
  25.             [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];   
  26.             _arrowImage.hidden = NO;  
  27.             _arrowImage.transform = CATransform3DIdentity;  
  28.             [CATransaction commit];  
  29.               
  30.             [self refreshLastUpdatedDate];  
  31.               
  32.             break;  
  33.         case EGOOPullRefreshLoading:  
  34.               
  35.             _statusLabel.text = NSLocalizedString(@"加载中...", @"Loading Status");  
  36.             [_activityView startAnimating];  
  37.             [CATransaction begin];  
  38.             [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];   
  39.             _arrowImage.hidden = YES;  
  40.             [CATransaction commit];  
  41.               
  42.             break;  
  43.         default:  
  44.             break;  
  45.     }  
  46.       
  47.     _state = aState;  
  48. }  

转载请注明:
原文转载自:http://blog.csdn.net/wildcatlele

新浪微博:http://weibo.com/u/3202802157