新浪微博客户端(20)-集成MJRefresh
HomeViewController.m
/** 集成下拉刷新控件 */
- (void)setupPullToRefreshView { __unsafe_unretained UITableView *tableView = self.tableView;
// 下拉刷新
tableView.mj_header= [MJRefreshNormalHeader headerWithRefreshingBlock:^{
[self pullToRefresh:tableView.mj_header];
}]; // 设置自动切换透明度(在导航栏下面自动隐藏)
tableView.mj_header.automaticallyChangeAlpha = YES; // 上拉刷新
tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
[self pullToLoad:tableView.mj_footer];
}]; [tableView.mj_header beginRefreshing]; // 开始进入刷新状态 } - (void)pullToRefresh:(MJRefreshHeader *)header { AFHTTPSessionManager *requestManager = [AFHTTPSessionManager manager]; NSString *urlString = @"https://api.weibo.com/2/statuses/friends_timeline.json";
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"access_token"] = [DJAccountTool account].access_token;
DJStatus *status = [self.statuses firstObject];
if (status) {
params[@"since_id"] = status.idstr; }
[requestManager GET:urlString parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary * _Nullable responseObject) {
NSArray *newStatuses = [DJStatus mj_objectArrayWithKeyValuesArray:responseObject[@"statuses"]];
// 1. 将刷新获取到的新数据添加到总数组的头部
NSRange range = NSMakeRange(, newStatuses.count);
NSIndexSet *indexSet = [[NSIndexSet alloc] initWithIndexesInRange:range];
[self.statuses insertObjects:newStatuses atIndexes:indexSet]; // 2. 刷新TableView
[self.tableView reloadData]; // 3. 结束刷新
[header endRefreshing]; // 4. 提示当前微博刷新数量
[self showRefreshStatusesNums:newStatuses.count]; } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[header endRefreshing];
}]; } - (void)pullToLoad:(MJRefreshFooter *)footer { AFHTTPSessionManager *requestManager = [AFHTTPSessionManager manager]; NSString *urlString = @"https://api.weibo.com/2/statuses/friends_timeline.json";
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"access_token"] = [DJAccountTool account].access_token;
DJStatus *status = [self.statuses lastObject];
if (status) {
long long max_id = [status.idstr longLongValue] - ;
params[@"max_id"] = @(max_id);
}
[requestManager GET:urlString parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary * _Nullable responseObject) {
NSArray *newStatuses = [DJStatus mj_objectArrayWithKeyValuesArray:responseObject[@"statuses"]];
// 1. 将刷新获取到的新数据添加到总数组的尾部
[self.statuses addObjectsFromArray:newStatuses]; // 2. 刷新TableView
[self.tableView reloadData]; // 3. 结束刷新
[footer endRefreshing]; } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[footer endRefreshing];
}]; }
最终效果:
新浪微博客户端(20)-集成MJRefresh的更多相关文章
- 新浪微博客户端(18)-集成下拉刷新控件UIRefreshControl
HomeViewController.m - (void)setupPullToRefreshView { UIRefreshControl *refreshControl = [[UIRefresh ...
- 新浪微博客户端(17)-集成MJExtension
使用MJExtension框架将字典转换为模型 DJHomeViewController.m /** 载入新的微博数据 */ - (void)loadNewStatues { AFHTTPSessio ...
- Android应用--新浪微博客户端新特性滚动视图和启动界面实现
新浪微博客户端新特性滚动视图和启动界面实现 2013年8月20日新浪微博客户端开发之启动界面实现 前言: 使用过新浪微博客户端的童鞋都清楚,客户端每一次升级之后第一次启动界面就会有新特性的介绍,用户通 ...
- Aisen仿新浪微博客户端项目源码
新浪目前已经限制了第三方微博的很多API接口,加上平常时间不够,所以后续可能不会面向产品的去维护Aisen,不过也有了一些新的方向,例如引入最新Android-support-library,在一个完 ...
- android 新浪微博客户端的表情功能的实现
这是一篇好文章,我转来收藏,技术的最高境界是分享. 最近在搞android 新浪微博客户端,有一些心得分享弄android客户端表情功能可以用以下思路1.首页把新浪的表情下载到本地一文件夹种,表情图片 ...
- 新浪微博客户端开发之OAuth认证篇
新浪微博客户端开发之OAuth认证篇 2013年7月29日新浪微博客户端开发 OAuth2.0授权机制我在这里就不浪费口舌了,有很多大牛都发表过相关的文章解释OAuth2.0认证的流程,我就随便找了一 ...
- android开发新浪微博客户端 完整攻略 [新手必读]
开始接触学习android已经有3个礼拜了,一直都是对着android的sdk文档写Tutorials从Hello World到Notepad Tutorial算是初步入门了吧,刚好最近对微博感兴趣就 ...
- 四次元新浪微博客户端Android源码
四次元新浪微博客户端Android源码 源码下载:http://code.662p.com/list/11_1.html [/td][td] [/td][td] [/td][td] 详细说明:http ...
- [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)
转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...
随机推荐
- Python-str函数
elp on class str in module __builtin__: 关于__builtin__模块中str类的帮助信息: class str(basestring) | str(obje ...
- linux内核分析 第八周
第八周 理解进程调度时机跟踪分析进程调度与进程切换的过程 一.进程调度与切换 1.进程的调度时机与进程切换 操作系统原理中介绍了大量进程调度算法,这些算法从实现的角度看仅仅是从运行队列中选择一个新进程 ...
- git的简介,安装以及使用
1git的简介 Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一). Git有什么特点?简单来说就是:高端大气上档次! 2Linus一直痛恨的CVS及SVN都是集中式的版本控制系 ...
- 利用window.name+iframe跨域获取数据详解
详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...
- Bootstrap系列 -- 22. 按钮
Bootstrap框架首先通过基础类名“.btn”定义了一个基础的按钮风格,然后通过“.btn-default”定义了一个默认的按钮风格.默认按钮的风格就是在基础按钮的风格的基础上修改了按钮的背景颜色 ...
- 第三十九课:requestAnimationFrame详解
大家应该都知道,如果一个页面运行的定时器很多,无论你怎么优化,最后肯定会超过指定时间才能完成动画.定时器越多,延时越严重. 为此,YUI,kissy等采用中央队列的方式,将定时器减少至一个.浏览器厂商 ...
- 将Image转化为BufferImage
public class BufferedImageBuilder { private static final int DEFAULT_IMAGE_TYPE = BufferedImage.TYPE ...
- java 获取主机IP
public class Chat extends JFrame { public static JTextField jt; public Chat(){ setLayout(new FlowLay ...
- JavaScript、jQuery、AJAX、JSON 解释
- iOS开发小技巧--设置按钮圆角
方法一:代码设置 方法二:通过图形化界面