iOS下拉刷新的EGO实现

Home / iOS MrLee 2015-1-10 2989

这两天公司主程要求在项目一些模块中添加下拉刷新,其实项目中本来就有,使用的是EGO框架来做的,话说,国外的开源框架确实做的牛逼啊,先赞一个.但是这篇文章我打算不光去介绍如何使用EGO,自己找了一些资料,然后觉得有必要把现在流行使用的一些实现都给罗列出来,各位看官就可以根据自己的需求来选择用什么.现在开始: 1.EGO作为最多使用的,先介绍ta吧,代码如下:
第一步: 首先下载EGO框架 第二步: 导入QuartzCore.framework框架 第三部: 代码编写
#import "ViewController.h"
#import "EGORefreshTableHeaderView.h"
#define SCREEN_WIDTH self.view.frame.size.width
#define SCREEN_HEIGHT self.view.frame.size.height
@interface ViewController ()
{
    EGORefreshTableHeaderView * _refreshHeaderView;
}
@property (nonatomic,weak) UITableView * tableView;
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    //创建tableview
    [self setupTableView];
    
    //创建refreshHeaderView
    [self setupRefreshHeaderView];
    
    //刷新最后刷新时间
    [_refreshHeaderView refreshLastUpdatedDate];
}
- (void)setupTableView
{
    UITableView * tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
    self.tableView = tableView;
    [self.view addSubview:tableView];
    tableView.showsVerticalScrollIndicator = NO;
    tableView.delegate = self;
    tableView.dataSource = self;
}

- (void)setupRefreshHeaderView
{
    if (_refreshHeaderView == nil) {
        _refreshHeaderView = [[EGORefreshTableHeaderView alloc]initWithFrame:CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height, SCREEN_WIDTH, self.tableView.bounds.size.height)];
        _refreshHeaderView.delegate = self;
        [self.tableView addSubview:_refreshHeaderView];
    }
}

#pragma mark tableviewDataSourse
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 5;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * ID = @"cell";
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:ID];
    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];;
    }
    cell.textLabel.text = @"CJ";
    return cell;
}
#pragma mark tableviewDelegate 
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 50;
}

这里的代码写到这里,我们看下效果.哦,对了,我在APPdelegate里写了一个导航控制器并设置tableview所在的控制器为根控制器

1B4F9549-3F5A-48D4-8D04-66DD049A6E80


效果大家看到了,基本样子是出来了,但是我们还需要去实现一些EGO的代理方法,这样才能确保能看还能用.
#pragma mark UIScrollViewDelegate Methods
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    
    [_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView];
    
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    
    [_refreshHeaderView egoRefreshScrollViewDidEndDragging:scrollView];
    
}

#pragma mark EGORefreshTableHeaderDelegate Methods
- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{
    
    [self reloadTableViewDataSource];
    [self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:3.0];
    
}
- (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{
    
    return _reloading; // 如果数据正在加载一定要返回
    
}
- (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{
    
    return [NSDate date]; // 返回时间
    
}

- (void)reloadTableViewDataSource{
    
    //  在这里加载tableview的数据模型
    _reloading = YES;  //必须
    
}
- (void)doneLoadingTableViewData{
    
    //  加载完数据调用这个方法,刷新tableview
    _reloading = NO;
    [_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];
    [self.tableView reloadData];
}

1B4F9549-3F5A-48D4-8D04-66DD049A6E80

本文链接:https://www.it72.com/693.htm

推荐阅读
最新回复 (0)
返回