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

 

posted on 2014-07-31 19:00  ゴルツの惠斌纳閣下  阅读(245)  评论(0编辑  收藏  举报