美文网首页
iOS 上啦下拉刷新

iOS 上啦下拉刷新

作者: Littleredguy | 来源:发表于2017-02-18 08:28 被阅读0次

    在iOS开发中,我们经常要用到下拉刷新和上拉刷新来加载新的数据,当前这也适合分页。iOS原生就带有该方法,下面就iOS自带的下拉刷新方法来简单操作。

    上拉刷新

    1、在TableView里,一打开软件,我们就调用下拉刷新事件。


    24- (void)viewDidLoad {

    [superviewDidLoad];

    // 集成刷新控件

    [selfsetupRefresh];

    }

    /**

    *  集成下拉刷新

    */

    -(void)setupRefresh

    {

    //1.添加刷新控件

    UIRefreshControl *control=[[UIRefreshControl alloc]init];

    [control addTarget:selfaction:@selector(refreshStateChange:) forControlEvents:UIControlEventValueChanged];

    [self.tableView addSubview:control];

    //2.马上进入刷新状态,并不会触发UIControlEventValueChanged事件

    [control beginRefreshing];

    // 3.加载数据

    [selfrefreshStateChange:control];

    }

    2、接下来,我们就要实现 refreshStateChange 这个方法,在里面显示数据和关闭下拉刷新。

    *  UIRefreshControl进入刷新状态:加载最新的数据

    */

    -(void)refreshStateChange:(UIRefreshControl *)control

    {

    // 3.发送请求

    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

    [mgr GET:@"https://api.weibo.com/2/statuses/public_timeline.json"parameters:nilsuccess:^(AFHTTPRequestOperation *operation,NSDictionary*responseObject){

    //1.获取数据,处理数据,传递数据给tableView,如:

    // 将最新的微博数据,添加到总数组的最前面

    //        NSRange range = NSMakeRange(0, newStatuses.count);

    //        NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:range];

    //        [self.statuses insertObjects:newStatuses atIndexes:set];

    //2.刷新表格

    [self.tableView reloadData];

    // 3. 结束刷新

    [control endRefreshing];

    } failure:^(AFHTTPRequestOperation *operation,NSError*error) {

    // 结束刷新刷新 ,为了避免网络加载失败,一直显示刷新状态的错误

    [control endRefreshing];

    }];

    }

    上拉刷新

    上拉刷新,一般用于分页请求,拉到底后,自动加载下一页。下面就拿加载新浪微博数据为例。

    一、由于下载加载更多数据,是一个不变的布局控件,我们就用xib来实现。

    HWLoadMoreFooter.h


    5#import

    @interfaceHWLoadMoreFooter : UIView

    +(instancetype)footer;

    @end

    HWLoadMoreFooter.m


    10#import "HWLoadMoreFooter.h"

    @implementationHWLoadMoreFooter

    +(instancetype)footer

    {

    return[[[NSBundlemainBundle] loadNibNamed:@"HWLoadMoreFooter"owner:niloptions:nil] lastObject];

    }

    @end

    接着,我们建立一个名为HWLoadMoreFooter的xib

    接下来,需要设置下面三个地方:

    接着在框里拖拉一个Label,设置Label为填充整个view

    最后,点击下图红色框,Update Frames

    xib建好之后,下面我们来实现上拉刷新的代码

    二.实现代码。

    1.在TabelView中加载时,先加载该控件


    10- (void)viewDidLoad {

    [superviewDidLoad];

    // 集成下拉刷新控件

    [selfsetupUpRefresh];

    // 集成上拉刷新控件

    [selfsetupDownRefresh];

    }

    2.集成上拉刷新方法

    /**

    *  集成上拉刷新

    */

    -(void)setupDownRefresh

    {

    HWLoadMoreFooter *footer = [HWLoadMoreFooter footer];

    footer.hidden =YES;

    self.tableView.tableFooterView = footer;

    }

    3.异步请求数据方法


    39- (void)loadMoreStatus

    {

    // 1.请求管理者

    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

    // 2.拼接请求参数

    HWAccount *account = [HWAccountTool account];

    NSMutableDictionary*params = [NSMutableDictionarydictionary];

    params[@"access_token"] = account.access_token;

    // 取出最后面的微博(最新的微博,ID最大的微博)

    HWStatus *lastStatus = [self.statuses lastObject];

    if(lastStatus) {

    // 若指定此参数,则返回ID小于或等于max_id的微博,默认为0。

    // id这种数据一般都是比较大的,一般转成整数的话,最好是long long类型

    longlongmaxId = lastStatus.idstr.longLongValue - 1;

    params[@"max_id"] = @(maxId);

    }

    // 3.发送请求

    [mgr GET:@"https://api.weibo.com/2/statuses/friends_timeline.json"parameters:params success:^(AFHTTPRequestOperation *operation,NSDictionary*responseObject) {

    // 将 "微博字典"数组 转为 "微博模型"数组

    NSArray*newStatuses = [HWStatus objectArrayWithKeyValuesArray:responseObject[@"statuses"]];

    // 将更多的微博数据,添加到总数组的最后面

    [self.statuses addObjectsFromArray:newStatuses];

    // 刷新表格

    [self.tableView reloadData];

    // 结束刷新(隐藏footer)

    self.tableView.tableFooterView.hidden =YES;

    } failure:^(AFHTTPRequestOperation *operation,NSError*error) {

    HWLog(@"请求失败-%@", error);

    // 结束刷新

    self.tableView.tableFooterView.hidden =YES;

    }];

    }

    4.实现scrollViewDidScroll


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

    {

    //    scrollView == self.tableView == self.view

    // 如果tableView还没有数据,就直接返回

    if(self.statuses.count == 0 ||self.tableView.tableFooterView.isHidden ==NO)return;

    CGFloat offsetY = scrollView.contentOffset.y;

    // 当最后一个cell完全显示在眼前时,contentOffset的y值

    CGFloat judgeOffsetY = scrollView.contentSize.height + scrollView.contentInset.bottom - scrollView.height -self.tableView.tableFooterView.height;

    if(offsetY >= judgeOffsetY) {// 最后一个cell完全进入视野范围内

    // 显示footer

    self.tableView.tableFooterView.hidden =NO;

    // 加载更多的微博数据

    [selfloadMoreStatus];

    }

    }

    相关文章

      网友评论

          本文标题:iOS 上啦下拉刷新

          本文链接:https://www.haomeiwen.com/subject/wietwttx.html