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

  • 相关阅读:
    ionic 导航
    vscode多光标编辑(MAC)
    vscode保存文件时自动删除行尾空格
    ionic-native sqlite 插件5.x版的在ionic3.x上报错 cannot read property 'split' of undefined
    MAC OSX 自带Apache 配置及使用
    ionic中ion-item下的div,span,p不渲染,应该给这些元素加上item-content属性
    开发ionic + cordova应用时遇到的坑,resources/splash.png do not meet minimum size requirements: 2732x2732
    ionic 创建指令的命名规则
    Soldier and Badges (set的检索简单运用)
    打败大魔王之最小排列数问题(全排列)
  • 原文地址:https://www.cnblogs.com/lixingle/p/3304489.html
Copyright © 2011-2022 走看看