下拉刷新 * 上拉加载

来源:互联网 发布:ubuntu 14.04 lamp 编辑:程序博客网 时间:2024/04/28 16:20

第一步第三方库 EGOTableViewPullRefresh 必须的导的

添加QuartzCore.framework组建

导包#import "EGORefreshTableHeaderView.h" 遵守协议

<EGORefreshTableHeaderDelegate>


第二步 

必要的声明

EGORefreshTableHeaderView *_refreshView; 

BOOL _isLoading;

第三步 - (void)viewDidLoad里

    _refreshView = [[EGORefreshTableHeaderViewalloc]initWithFrame:CGRectMake(0, -self.tableView.frame.size.height,self.tableView.frame.size.width,self.tableView.frame.size.height)];


设置代理

 _refreshView.delegate =self;

 [self.tableViewaddSubview:_refreshView]; //此处控制器继承的时uitableviewcontroller

[_refreshViewrefreshLastUpdatedDate];    //《《刷新完后给下拉页面加时间》》


[selfstartRequest]; //刚进入本视图的页面是在此请求出来的。。。。。。此处主要是为刚进入页面时准备一些显示的数据,由asi请求,这里不写了



[self.tableViewaddSubview:_refreshView];


第四步 

代理方法1  

#pragma mark  --UIScrollViewDelegate(若是继承的uitableviewcontroller不用声明遵守协议继承UIScrollView)--

// 《《这两个方法:: 拖拽结束  滚动(这两个状态) 的完美结合,考虑到拖动过程和停止的瞬间》》

//滚动过程中此方法一直被调用(一旦发现到底了 就赶紧请求数据)


//个人觉得下面这个方法关键的一个方法,其实每次拉到底上拉的时候,向服务器请求数据的时此方法

下面还有一个是跟下拉有关的也是关键的一个地方

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

//因为一直在调用   当拉到底准备加载接下来的数据时  根据拖动的程度  此处可能连续请求 n 页数据   

//判断拉到底了吗 如果拉到底则进行请求数据继续展示

if (scrollView.contentOffset.y + scrollView.frame.size.height > scrollView.contentSize.height+50) {

        _currentPage++;

        [self requestMoreWithPage:_currentPage];

//带着参数(请求的页数)去请求数据

    }   此处if语句主要实现了”上拉加载“

    [_refreshViewegoRefreshScrollViewDidScroll:scrollView];

    // 可能是将scrollview跟这个第三方库关联的(比如 上拉加载后会在下拉页面显示一次时间,比如下拉一下那个下拉箭头朝上朝下的动画也跟着有关)

}


- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{

    

    [_refreshViewegoRefreshScrollViewDidEndDragging:scrollView];

    

}



代理方法2

#pragma mark   --EGORefreshTableHeaderView--

//每进行一次下拉操作 执行执行一次该方法 

//个人觉得下面这方法是最有用的地方,实现了下拉一下请求一次数据,达到了下拉刷新的目的了,恢复到了当初进入这个页面时 那个状态

- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{

    

    if (_isLoading ==NO) {

        _isLoading = YES;

        NSLog(@"加载状态yes:%d",_isLoading);

    }


    [selfstartRequest];//page=1时(给初始数据) viewDidLoad里请求一次在这里可能请求多次(返回来后可以进行多次下拉操作 此时要的还是当初刚进到这个页面时的数据)。。。。

   

    NSLog(@"下拉一下请求第一页数据");

          

}此方法主要实现了“下拉刷新”操作


//刷新视图是否属于数据加载数据加载状态,返回值为NO,执行后续的操作,YES不执行后续操作

// 《《下拉/上拉 过程中一直被调用》》

- (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{

    

    //NSLog(@"判断加载状态:%d",_isLoading);


    return_isLoading;

   

}


//执行刷新方法后 调用此方法   《《下拉/上拉刷新完毕后调用》》

- (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{

     NSLog(@"(刚开始/刷新后)给下拉页面date");

    return [NSDatedate];

    //返回当前系统时间 把时间放到下拉那个页面上。。。。。

}

第五步

每次刷新 完成从服务器上请求完数据后,的调用下这个方法  有始有终吧(不然下拉刷新操作完后 弹不回去了)

 [_refreshViewegoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];

可能是将tableview跟这个第三方库关联的,



当然了asi网络请求的代理方法  tableview的代理也的在这里配合一下 没写




原创粉丝点击