zoukankan      html  css  js  c++  java
  • 06---数据的下拉刷新上拉加载更多实现

    谈谈关于数据的下拉刷新上拉加载更多实现

    页面加载数据:

    #pragma mark - 加载微博数据
    - (void)loadStatusData
    {
        _statusesFrame = [NSMutableArray array];
        // 微博管理 加载
        [StatusManage getStatusesWithSendSinceId:0 maxId:0 Success:^(NSArray *statues) {
            
            for (Status *s in statues) {
            StatusCellFrame *f = [[StatusCellFrame alloc] init];
                f.status = s;
            [_statusesFrame addObject:f];
            }
            [self.tableView reloadData];
        } failure:^(NSError *error) {
            NSLog(@"%@",error);
        }];
    }

    上拉刷新:

    #pragma mark - 加载最新数据
    - (void)loadNewData:(MJRefreshBaseView *)refreshView
    {
        // 1.取出第一条微博数据的id
        StatusCellFrame *scf = [_statusesFrame firstObject];
        long long since = [[scf status] ID];
        // 2.获取在sence以后的微博数据
        [StatusManage getStatusesWithSendSinceId:since maxId:0 Success:^(NSArray *statues) {
            // 1》.获取最新微博数据的同时计算添加到对应的frame
            NSMutableArray *newStatusFrameArray = [[NSMutableArray alloc] init];
            for (Status *s in statues) {
                StatusCellFrame *f = [[StatusCellFrame alloc] init];
                f.status = s;
                [newStatusFrameArray addObject:f];
            }
            // 2》.将数组整体插入到第一条微博前面
           [ _statusesFrame insertObjects:newStatusFrameArray atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, newStatusFrameArray.count)]];
            // 3》.刷新表格
            [self.tableView reloadData];
            // 4.让刷新控件停止刷新状态
            [refreshView endRefreshing];    
            [self showNewStatusCount:newStatusFrameArray.count];
            
        } failure:^(NSError *error) {
            [refreshView endRefreshing];
        }];
    }

    下拉加载更多:

    #pragma mark - 加载更多数据
    - (void)loadMoreData:(MJRefreshBaseView *)refreshView
    {
        // 1.最后1条微博的ID
        StatusCellFrame *f = [_statusesFrame lastObject];
        long long last = [f.status ID];
        
        // 2.获取微博数据
        [StatusManage getStatusesWithSendSinceId:0 maxId:last-1 Success:^(NSArray *statues) {
            // 1.在拿到最新微博数据的同时计算它的frame
            NSMutableArray *oldStatusFrameArray = [NSMutableArray array];
            for (Status *s in statues) {
                StatusCellFrame *f = [[StatusCellFrame alloc] init];
                f.status = s;
                [oldStatusFrameArray addObject:f];
            }
            // 2.将newFrames整体插入到旧数据的后面
            [_statusesFrame addObjectsFromArray:oldStatusFrameArray];
            // 3.刷新表格
            [self.tableView reloadData];
            
            // 4.让刷新控件停止刷新状态
            [refreshView endRefreshing];
            [self showNewStatusCount:oldStatusFrameArray.count];
        } failure:^(NSError *error) {
            [refreshView endRefreshing];
        }];
    }

    心得就是:

         下拉加载更多,所得数组可以直接添加到当前显示页面数组的最后一个对象后面,

    // 2.将newFrames整体插入到旧数据的后面
            [_statusesFrame addObjectsFromArray:oldStatusFrameArray];

          上拉刷新,所得数组的整体必须插入在当前显示页面数组的第一个对象前面  因为新浪返回的数据是根据时间越短 id越大 

          

    // 2》.将数组整体插入到第一条微博前面
           [ _statusesFrame insertObjects:newStatusFrameArray atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, newStatusFrameArray.count)]];
  • 相关阅读:
    vue2.0 keep-alive最佳实践
    Vue解决安卓4.4不兼容的问题
    体验异步的终极解决方案-ES7的Async/Await
    axios在vue中的简单配置与使用
    AngularJS-UI-Router
    SignalR 填坑记
    小心C# 5.0 中的await and async模式造成的死锁
    使用BCP导出导入数据
    关闭正在执行的事务 Kill
    C# 正则表达式
  • 原文地址:https://www.cnblogs.com/lszwhb/p/3881504.html
Copyright © 2011-2022 走看看