• 实现下拉更新UITableView EGORefreshTableHeaderView


    关于如何在页面中使用EGORefreshTableHeaderView的文章网上一大把, 抄来抄去的, 但也都没什么大问题.  只是在XCode4.2的ARC环境中使用的时候, 错误一把. 借此机会, 完整的记录一下如何排除错误, 及使用的方法.

    首先第一步当然是下载这个下拉更新的框架了.  https://github.com/enormego/EGOTableViewPullRefresh/downloads


    下载之后解包, 然后将 

    EGORefreshTableHeaderDelegate.h

    EGORefreshTableHeaderDelegate.m

    这两个文件, 以及项目中的图片文件都复制到你的项目文件内, 这时候, 如果你启用了ARC, 应该会报一片错误, 让我们来具体看一下. 


    启用了ARC之后, 就不允许手动的release了, 因此, [view release], [lable release] 还有 autorelease这样的代码都需要删除掉.

    在EGORefreshTableHeaderDelegate.m的这个文件中,   @synthesize delegate=_delegate;  会报错,  "Existing ivar 'delegate' for assign property 'delegate' must be... 

    解决办法是需要将EGORefreshTableHeaderDelegate.h文件中的 assign 换为retain

    1. //@property(nonatomic,assign) id <EGORefreshTableHeaderDelegate> delegate;   //删除掉. 换为下面的  
    2. @property(nonatomic,retain)id <EGORefreshTableHeaderDelegate> delegate;  

    这样代码就会通过编译了~ 这样就需要将EGORefreshTableHeaderView与我们的tableview整合了, 然后按照Demo的方法, 

    添加EGORefreshTableHeaderDelegate的接口, 

    定义_reloading, 和EGORefreshHeaderView

    声明reloadTableViewDataSource和doneLoadingTableView这两个函数

    1. #import <UIKit/UIKit.h>  
    2. #import "EGORefreshTableHeaderView.h"  
    3.   
    4. @interface FMFutureMessage : UIViewController<UITableViewDelegate, UITableViewDataSource,EGORefreshTableHeaderDelegate>  
    5. {  
    6.     BOOL _reloading;  
    7.     EGORefreshTableHeaderView *_refreshHeaderView;  
    8. }  
    9.   
    10. @property(strong, nonatomic) IBOutlet UITableView *tbView;  
    11.   
    12. -(void)reloadTableViewDataSource;  
    13. -(void)doneLoadingTableViewData;   
    14. @end  

    接下来, 我们需要将xib文件中的TableViewController与这里定义的tbView建立关联, 因为我忘记了指定tbView与XIB中的TabViewController, 导致了刷新箭头怎么样也显示不出来, 所以一定不要忘记啊~~~~ 
    现在我们处理一下.m文件

    处理m文件, 建立关联.和响应事件.

    1. - (void)viewDidLoad  
    2. {  
    3.     [super viewDidLoad];  
    4.     // Do any additional setup after loading the view from its nib.  
    5.     if(_refreshHeaderView == nil)  
    6.     {  
    7.         EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tbView.bounds.size.height, self.view.frame.size.width, self.tbView.bounds.size.height)];  
    8.    
    9.         view.delegate = self;  
    10.         [self.tbView addSubview:view];  
    11.         _refreshHeaderView = view;  
    12.     }  
    13.     [_refreshHeaderView refreshLastUpdatedDate];  
    14. }  


    响应事件, 事件的响应代码就简单的多了, 按照DEMO的方法, 把接口的函数都声明了就OK了.

    1.    
    2. -(void)reloadTableViewDataSource  
    3. {  
    4.     NSLog(@"==开始加载数据");  
    5.     [self.tbView reloadData];  
    6.     _reloading = YES;  
    7.        
    8. }  
    9. - (void)doneLoadingTableViewData{    
    10.       
    11.      NSLog(@"===加载完数据");   
    12.     //  model should call this when its done loading    
    13.        _reloading = NO;    
    14.     [_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tbView];    
    15.    
    16.    
    17. }    
    18. #pragma mark –   
    19. #pragma mark UIScrollViewDelegate Methods   
    20. - (void)scrollViewDidScroll:(UIScrollView *)scrollView{    
    21.       
    22.     [_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView];    
    23.       
    24. }    
    25.   
    26. - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{    
    27.       
    28.     [_refreshHeaderView egoRefreshScrollViewDidEndDragging:scrollView];    
    29.       
    30. }  
    31.    
    32. #pragma mark –   
    33. #pragma mark EGORefreshTableHeaderDelegate Methods   
    34. - (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{    
    35.       
    36.     [self reloadTableViewDataSource];    
    37.     [self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:3.0];    
    38.     
    39.         
    40.       
    41. }    
    42. - (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{    
    43.       
    44.     return _reloading; // should return if data source model is reloading    
    45.       
    46. }    
    47. - (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{    
    48.       
    49.     return [NSDate date]; // should return date data source was last changed    
    50.       
    51. }  

    最后, 如果是开发中文应用程序, 不要忘记进入EGORefreshTableHeaderView.m中, 将提示的英文换成中文. 
  • 相关阅读:
    WPF游戏摘记地图编辑器(1)
    图片和视频操作核心代码
    WPF游戏摘记地图编辑器(2)
    序言
    Asp.Net 请求处理机制
    C#正则表达式
    ActiveX控件打包成Cab实现浏览器自动下载安装
    ios数据存储
    ARC 学习
    Ray's Learn Cocos2d 笔记(一)
  • 原文地址:https://www.cnblogs.com/dancingrain/p/3405233.html
Copyright © 2020-2023  润新知