zoukankan      html  css  js  c++  java
  • IOS学习之路十二(UITableView下拉刷新页面)

    今天做了一个下拉刷新的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

  • 相关阅读:
    pipelinewise 学习二 创建一个简单的pipeline
    pipelinewise 学习一 docker方式安装
    Supercharging your ETL with Airflow and Singer
    ubuntu中使用 alien安装rpm包
    PipelineWise illustrates the power of Singer
    pipelinewise 基于singer 指南的的数据pipeline 工具
    关于singer elt 的几篇很不错的文章
    npkill 一个方便的npm 包清理工具
    kuma docker-compose 环境试用
    kuma 学习四 策略
  • 原文地址:https://www.cnblogs.com/lixingle/p/3304489.html
Copyright © 2011-2022 走看看