• 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)]];
  • 相关阅读:
    持续集成
    持续集成
    持续集成
    持续集成
    持续集成
    持续集成
    CuDNNLSTM: UnknownError: Fail to find the dnn implementation
    Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
    django nginx uwsgi 502 Gateway
    ubuntu nginx 启动多个Django项目
  • 原文地址:https://www.cnblogs.com/lszwhb/p/3881504.html
Copyright © 2020-2023  润新知