iOS中tableView的下拉刷新与上拉加载(一)

10 篇文章 0 订阅

如今,下拉刷新与上拉加载越来越流行了,你做个应用要是没有这个功能,都不好意思拿出手,苹果SDK顺应大流推出了下拉刷新功能,感觉不是很好用。而且也没有加载更多方法,第三方库给我提供了很好的解决方案。如EGOTableViewPullRefresh

将该库复制到项目目录下

导入头文件和代理 EGORefreshTableHeaderDelegate

#import "EGORefreshTableHeaderView.h"


声明一些变量用来布局和控制刷新:

    UITableView *_tableView;
    NSMutableArray *_dataArray;
    //是否可以刷新
    BOOL _isRefresh;
    //关键,刷新控制器
    EGORefreshTableHeaderView *_refreshView;

在- (void)viewDidLoad 方法里进行初始化

    _dataArray = [[NSMutableArray alloc]init];
    _tableView = [[UITableView alloc]initWithFrame:
                  CGRectMake(0, 0, 320, self.view.frame.size.height-64-49)];
    self.automaticallyAdjustsScrollViewInsets = NO;
    _tableView.dataSource = self;
    _tableView.delegate = self;
    [self.view addSubview:_tableView];
    _refreshView = [[EGORefreshTableHeaderView alloc]
                        initWithFrame:CGRectMake(0, -460, 320, 460)];
    _refreshView.delegate = self;
    [_tableView addSubview:_refreshView];

 实现代理方法: 

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 90;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _dataArray.count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return nil;
}


//tableView的代理方法
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    [_refreshView egoRefreshScrollViewDidScroll:_tableView];
}

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    [_refreshView egoRefreshScrollViewDidEndDragging:_tableView];

}

#pragma mark -
#pragma mark EgoRefresh的代理方法
//更新时间
-(NSDate *)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView *)view
{
    return [NSDate date];
}

//是否可以刷新
-(BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView *)view
{
    return _isRefresh;
}

//触发方法
-(void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView *)view
{
    _isRefresh = YES;
    [self pullDownRefresh];//调用刷新方法
}

//刷新处理
-(void)pullDownRefresh
{
//1.开始网络请求(因为是更新,所以接口不用变),将_dataArray里面的数据清空
//2.请求的数据保存在_dataArray里面,并重新加载_tableView
//3.调用endPullDownRefresh方法,停止刷新
}

//结束下拉刷新
-(void)endPullDownRefresh
{
    [_refreshView egoRefreshScrollViewDataSourceDidFinishedLoading:_tableView];
    _isRefresh = NO;
}


之所以能下拉刷新,关键就在于这两个方法

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    [_refreshView egoRefreshScrollViewDidScroll:_tableView];
}

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    [_refreshView egoRefreshScrollViewDidEndDragging:_tableView];

}

这两个方法将tableView的实时偏移传给refreshView。当偏移达到一定距离就开始刷新


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值