1.用MJRefresh框架实现上下拉刷新

1.1 如何使用这个框架,只需要告诉控件的scrollView是谁,就能将框架添加到我们的滚动视图中了

// 下拉刷新

MJRefreshHeaderView *header = [MJRefreshHeaderView header];

header.scrollView = self.tableView;

header.delegate = self;

// 开始下拉刷新

[header beginRefreshing];

/ 下拉刷新

MJRefreshFooterView *footer = [MJRefreshFooterView footer];

footer.scrollView = self.tableView;

footer.delegate = self;

1.2 如何加载数据:需要知道两个参数的意思 sinceId 和 maxId ,两个不能同时传,如果传入sinceId,就会新浪服务器就会返回比sinceId大的微博数据,也就是最新的,所以我们只需要取出当前数组最大的sinceId也就是数组第一关元素的sinceId传入到请求方法中,就能获取。如果传入maxId,新浪服务器就会返回小于等于maxId的微博数据,如果想要获取以前的数据,并且不重复,需要取出数组中最小的maxId,也是最后一个元素的maxId将maxId-1,就能获取了之前的数据了。

1.3 加载最新数据,需要将获取到的数据插入最前面

#pragma mark 下拉刷新新数据

- (void)loadNewData:(MJRefreshBaseView *)refreshView

{

// 取出第一条微博ID

// 需要判断数组是否为空。

StatusCellFrame *f = _statusesFrame.count?_statusesFrame[0] :nil;

long long sinceId = f.status.ID;

[StatusTool statusesWithPath:@"2/statuses/friends_timeline.json"  sinceId:sinceId maxId:0 success:^(NSArray *statues) {

// 显示刷新了多少条数据

[self showNewStatusCount:statues.count];

 // 将获取到的数据放置最前面

NSMutableArray *newFrames = [NSMutableArray arrayWithCapacity:statues.count];

for (Status *status in statues) {

// 将微博数据转换成frame模型

StatusCellFrame *f = [[StatusCellFrame alloc] init];

f.status = status;

[newFrames addObject:f];

}

// 将数据插入到数组最前面

[_statusesFrame insertObjects:newFrames atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, newFrames.count)]];

// 刷新表格

[self.tableView reloadData];

// 停止刷新状态

[refreshView endRefreshing];

} failure:^(NSError *error) {

[refreshView endRefreshing];

}];

}

1.4 加载更多以前的数据,直接将获取到的数据添加到最后就行了。

#pragma mark 上啦刷新更多

- (void)loadMoreData:(MJRefreshBaseView *)refreshView

{

// 取出最后一条微博ID

StatusCellFrame *f = [_statusesFrame lastObject];

long long maxId = f.status.ID;

// 加载比当前小的微博数据

maxId--;

[StatusTool statusesWithPath:@"2/statuses/friends_timeline.json"  sinceId:0 maxId:maxId success:^(NSArray *statues) {

// 将获取到的数据放置最前面

NSMutableArray *newFrames = [NSMutableArray arrayWithCapacity:statues.count];

for (Status *status in statues) {

// 将微博数据转换成frame模型

StatusCellFrame *f = [[StatusCellFrame alloc] init];

f.status = status;

[newFrames addObject:f];

}

// 将数据添加到最后面

[_statusesFrame addObjectsFromArray:newFrames];

// 刷新表格

[self.tableView reloadData];

// 让刷新控件停止刷新状态

[refreshView endRefreshing];

} failure:^(NSError *error) {

[refreshView endRefreshing];

}];

}
 
 
代码地址: https://github.com/CoderMJLee/MJRefresh

iOS-MJRefresh框架的更多相关文章

  1. 又一个高性能轻量级的iOS模型框架YYModel

    前言 iOS的模型框架其实有很多了,去年研究过Mantle,也了解过JSONModel.MJExtension,最近的项目项目优化的时候,再次考虑,基于轻量级.高性能的考虑,最终选择了YYModel. ...

  2. [iOS 主要框架的总结]

    原文地址:http://blog.csdn.net/GooHong/article/details/28911301 在iOS中框架是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件, ...

  3. swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程

    swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 1.2.3  注册非免费苹果账号swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 免费的苹果账号在 ...

  4. Swift版iOS游戏框架Sprite Kit基础教程下册

    Swift版iOS游戏框架Sprite Kit基础教程下册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C 介绍:本教程是国内唯一的Swift版的Spritekit教程. ...

  5. iOS Foundation 框架概述文档:常量、数据类型、框架、函数、公布声明

    iOS Foundation 框架概述文档:常量.数据类型.框架.函数.公布声明 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业 ...

  6. IOS系统框架

    IOS系统框架:ios架构号MAC OS的基础框架相似:ios扮演底层硬件和应用程序的中介,底层为所有应用程序提供基础服务,高层则包含一些复杂巧妙的技术和服务,并且创建的应用程序不能直接访问硬件. C ...

  7. ios中框架介绍

    ios中框架介绍 参考博客: 参考文章:框架介绍 框架介绍 框架就是一个目录,一个目录包含了共享库,访问共享库里面的代码的头文件,和其他的图片和声音的资源文件.一个共享库定义的方法和函数可以被应用程序 ...

  8. iOS Foundation 框架基类

    iOS Foundation 框架基类 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转 ...

  9. iOS各框架功能简述以及系统层次结构简单分析

    iOS各个框架所对应的功能简单介绍 iOS系统结构层次:

  10. iOS绘图框架CoreGraphics分析

    由于CoreGraphics框架有太多的API,对于初次接触或者对该框架不是十分了解的人,在绘图时,对API的选择会感到有些迷茫,甚至会觉得iOS的图形绘制有些繁琐.因此,本文主要介绍一下iOS的绘图 ...

随机推荐

  1. 百度静态资源库CDN库, cdnjs库,引入JS

    不适用本地引入js文件,而使用其他服务器引入JS文件,1,减轻服务器压力2,速度快3,可以缓存 cdnjs库,更新比较快https://cdnjs.com/ cdn库 引入JS文件如:jquerybo ...

  2. Laravel Model updating&updated 事件使用注意事项

    1 触发条件 1.1 updating 1.1.1 如果字段无变化,不会触发此事件. 1.1.2 除非更改至少一个字段的值 2 事件逻辑不会覆盖 2.1 Trait 中定义事件如下 /** * The ...

  3. GreenPlum 锁表以及解除锁定

    最近遇到truncate表,无法清理的情况,在master节点查看加锁情况,并未加锁这种情况极有可能是segment节点相关表加了锁,所以遇到这种情况除了排查master节点的锁,所有的segment ...

  4. react的登录逻辑

    https://blog.csdn.net/qq_36822018/article/details/83028661(先看看这个 https://blog.csdn.net/weixin_342681 ...

  5. Linux操作系统常用命令合集——第四篇-文件系统权限操作(5个命令)

    1.umask [命令作用] 文件或目录创建时的遮罩码 [命令语法] umask     [选项]    [参数] [常用选项] -p  --输出的权限掩码可直接作为指令来执行 -s  --以符号方式 ...

  6. 【原创】go语言学习(六)函数详解2

    目录 变量作用域和可见性 匿名函数 闭包 课后练习 变量作用域和可见性 1.全局变量量,在程序整个生命周期有效. var a int = 10 2.局部变量量,分为两种: 1)函数内定义, 2)语句句 ...

  7. java Spring定时器 每个季度执行一次

    @Scheduled(cron = " 0 00 00 1 4,7,10,1 ?")//每个季度的第一天零点进行统计此注解是每个季度结束后的下一天执行(因为Spring不识别字母( ...

  8. 提高python运行效率的方法

    让关键代码依赖于外部包:你可以为紧急的任务使用C.C++或机器语言编写的外部包,这样可以提高应用程序的性能 使用生成器,因为可以节约大量内存 多个if elif条件判断,可以把最有可能先发生的条件放到 ...

  9. 牛客训练21674——牛牛与LCM

    Problem 链接:https://ac.nowcoder.com/acm/problem/21674 来源:牛客网 牛牛最近在学习初等数论,他的数学老师给他出了一道题,他觉得太简单了, 懒得做,于 ...

  10. mysql PS1个性化

    method ) $ export MYSQL_PS1="\u@\h [\d]> " method ) mysql> prompt \u@\h [\d]> met ...