下拉刷新和上拉加载更多实现方法

一  下拉刷新

  1)使用第三方类库:EGORefreshTableHeaderView。在-(void)viewDidLoad:中设置EGORefreshTableHeaderView的一个实例,添加一下代码

 //下拉刷新

    self.refreshHeaderView = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height, self.view.frame.size.width, self.tableView.bounds.size.height)];

    _refreshHeaderView.delegate = self;

    [self.tableView addSubview:_refreshHeaderView];


2)重写scrollView和 EGORefreshTableHeaderView的代理方法

 

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

//下拉刷新

[_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView];

    

 //scrollView.contentOffset.y表单偏移长度,表单向上滚动出屏幕的高度

//这个if 语句用来判断 是否显示“上拉加载更多”字样

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

    {

//默认的是隐藏,现在设为不隐藏

        [self.tableView.tableFooterView setHidden:NO];

    }

}


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

//下拉刷新 代理

[_refreshHeaderView egoRefreshScrollViewDidEndDragging:scrollView];

    

    if (_isLastPage) {

        [self.tableView.tableFooterView setHidden:YES];

        return;

    }

    

    //scrollView.contentOffset.y表单偏移长度,表单向上滚动出屏幕的高度

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

    {

        if ([NetAccess reachable]) {

            [_activityIndicatorView  startAnimating];

            [self loadNextPage];

        }

    }else {

        [self.tableView.tableFooterView setHidden:YES];

    }

}

(3)//下拉刷新的代理方法  触发刷新

- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view

{

   [self reloadTableViewDataSource];

}
(4)//刷新开始

- (void)reloadTableViewDataSource{

    [self reloadAllData];

/*(网络请求数据,在数据返回的方法中一定要添加以下代码:

[self.tableView reloadData];//得到数据 进行刷新

        [self doneLoadingTableViewData];//刷新结束

        [_activityIndicatorView  stopAnimating];//指示器停止)*/


_reloading = YES;//正在刷新

}

(5)//刷新结束 获取到数据 刷新结束后刷新控件恢复到原位

- (void)doneLoadingTableViewData{

_reloading = NO;

[_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];

}



(6)//得到刷新状态

- (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view

{

return _reloading; // should return if data source model is reloading

}

(7)//记录刷新时间

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

{

NSUserDefaults *info = [NSUserDefaults standardUserDefaults];

    NSDate *date = [info objectForKey:@"LastAPILoadList"];

return date;

}


二 上拉加载更多
1)在viewDidLoad中添加以下代码:

    UILabel *label = [[UILabel alloc]init];

    label.text = @"上拉加载更多";

    label.tag = 9999;

    label.frame = CGRectMake(PAD_VS_PHONE(334, 110), 0, 100, 30);

    label.textColor = [UIColor darkGrayColor];

    label.font = [UIFont boldSystemFontOfSize:14];

    label.backgroundColor = [UIColor clearColor];

    

    self.activityIndicatorView = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];

    UIView *bottomView = [[UIView alloc]init ];

    [bottomView addSubview:label];

    bottomView.backgroundColor = [UIColor whiteColor];

    bottomView.frame = CGRectMake(0, 0, 320, 30);

    [bottomView addSubview:_activityIndicatorView];

    _activityIndicatorView.frame = CGRectMake(PAD_VS_PHONE(314, 90), 5, 20, 20);

    self.tableView.tableFooterView = bottomView;

    [self.tableView.tableFooterView setHidden:YES];


2)重写scrollView的代理方法 同上
3)上拉加载 加载下一页的方法

-(void)loadNextPage

{

    if ([ NetAccess reachable]) {

            currentPage++;

            [self.netAccess loadHotList:10 Num:currentPage];

    }

}

4)在数据返回的代理方法中添加以下代码:

//判断是第几页

if(currentPage > 1)

{ //如果消息的数量<10的话 说明没有更多数据了

        if (msgs.count < 10) {

            _isLastPage = YES;

            UILabel *footerLabel = (UILabel *)[self.tableView.tableFooterView viewWithTag:9999];

            footerLabel.text = @"没有更多信息了";

        }

        NSMutableArray *temp = [[NSMutableArray alloc]initWithArray:_currentMsgs];

        [temp addObjectsFromArray:msgs];

        self.currentMsgs = temp;

        [self.tableView reloadData];

        [self doneLoadingTableViewData];

        [_activityIndicatorView  stopAnimating];

        

    }else {

}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值