以我最近做的微格项目为例,谈谈关于数据的下拉刷新上拉加载更多实现
页面加载数据:
#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)]];
06---数据的下拉刷新上拉加载更多实现
时间: 2024-10-08 04:20:41