您的位置:首页 > 移动开发 > IOS开发

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

2014-09-19 18:17 411 查看
如今,下拉刷新与上拉加载越来越流行了,你做个应用要是没有这个功能,都不好意思拿出手,苹果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。当偏移达到一定距离就开始刷新
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: