首页 > 代码库 > 06---数据的下拉刷新上拉加载更多实现

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)]];