首页 > 代码库 > 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)]];
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。