iOS下拉刷新和上拉刷新
在iOS开发中,我们经常要用到下拉刷新和上拉刷新来加载新的数据,当前这也适合分页。iOS原生就带有该方法,下面就iOS自带的下拉刷新方法来简单操作。
上拉刷新
1、在TableView里,一打开软件,我们就调用下拉刷新事件。
- (void)viewDidLoad {
[super viewDidLoad];
// 集成刷新控件
[self setupRefresh];
}
/**
* 集成下拉刷新
*/
-(void)setupRefresh
{
//1.添加刷新控件
UIRefreshControl *control=[[UIRefreshControl alloc]init];
[control addTarget:self action:@selector(refreshStateChange:) forControlEvents:UIControlEventValueChanged];
[self.tableView addSubview:control];
//2.马上进入刷新状态,并不会触发UIControlEventValueChanged事件
[control beginRefreshing];
// 3.加载数据
[self refreshStateChange:control];
}
2、接下来,我们就要实现 refreshStateChange 这个方法,在里面显示数据和关闭下拉刷新。
/**
* UIRefreshControl进入刷新状态:加载最新的数据
*/
-(void)refreshStateChange:(UIRefreshControl *)control
{
// 3.发送请求
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; [mgr GET:@"https://api.weibo.com/2/statuses/public_timeline.json" parameters:nil success:^(AFHTTPRequestOperation *operation, NSDictionary *responseObject){ //1.获取数据,处理数据,传递数据给tableView,如: // 将最新的微博数据,添加到总数组的最前面
// NSRange range = NSMakeRange(0, newStatuses.count);
// NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:range];
// [self.statuses insertObjects:newStatuses atIndexes:set]; //2.刷新表格
[self.tableView reloadData]; // 3. 结束刷新
[control endRefreshing]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { // 结束刷新刷新 ,为了避免网络加载失败,一直显示刷新状态的错误
[control endRefreshing];
}];
}
上拉刷新
上拉刷新,一般用于分页请求,拉到底后,自动加载下一页。下面就拿加载新浪微博数据为例。
一、由于下载加载更多数据,是一个不变的布局控件,我们就用xib来实现。
HWLoadMoreFooter.h
#import <UIKit/UIKit.h> @interface HWLoadMoreFooter : UIView
+(instancetype)footer;
@end
HWLoadMoreFooter.m
#import "HWLoadMoreFooter.h" @implementation HWLoadMoreFooter +(instancetype)footer
{
return [[[NSBundle mainBundle] loadNibNamed:@"HWLoadMoreFooter" owner:nil options:nil] lastObject];
} @end
接着,我们建立一个名为HWLoadMoreFooter的xib
接下来,需要设置下面三个地方:
接着在框里拖拉一个Label,设置Label为填充整个view
最后,点击下图红色框,Update Frames
xib建好之后,下面我们来实现上拉刷新的代码
二.实现代码。
1.在TabelView中加载时,先加载该控件
- (void)viewDidLoad {
[super viewDidLoad];
// 集成下拉刷新控件
[self setupUpRefresh];
// 集成上拉刷新控件
[self setupDownRefresh];
}
2.集成上拉刷新方法
/**
* 集成上拉刷新
*/
-(void)setupDownRefresh
{
HWLoadMoreFooter *footer = [HWLoadMoreFooter footer];
footer.hidden = YES;
self.tableView.tableFooterView = footer;
}
3.异步请求数据方法
- (void)loadMoreStatus
{
// 1.请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; // 2.拼接请求参数
HWAccount *account = [HWAccountTool account];
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"access_token"] = account.access_token; // 取出最后面的微博(最新的微博,ID最大的微博)
HWStatus *lastStatus = [self.statuses lastObject];
if (lastStatus) {
// 若指定此参数,则返回ID小于或等于max_id的微博,默认为0。
// id这种数据一般都是比较大的,一般转成整数的话,最好是long long类型
long long maxId = lastStatus.idstr.longLongValue - 1;
params[@"max_id"] = @(maxId);
} // 3.发送请求
[mgr GET:@"https://api.weibo.com/2/statuses/friends_timeline.json" parameters:params success:^(AFHTTPRequestOperation *operation, NSDictionary *responseObject) {
// 将 "微博字典"数组 转为 "微博模型"数组
NSArray *newStatuses = [HWStatus objectArrayWithKeyValuesArray:responseObject[@"statuses"]]; // 将更多的微博数据,添加到总数组的最后面
[self.statuses addObjectsFromArray:newStatuses]; // 刷新表格
[self.tableView reloadData]; // 结束刷新(隐藏footer)
self.tableView.tableFooterView.hidden = YES;
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
HWLog(@"请求失败-%@", error); // 结束刷新
self.tableView.tableFooterView.hidden = YES;
}];
}
4.实现scrollViewDidScroll
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// scrollView == self.tableView == self.view
// 如果tableView还没有数据,就直接返回
if (self.statuses.count == 0 || self.tableView.tableFooterView.isHidden == NO) return; CGFloat offsetY = scrollView.contentOffset.y; // 当最后一个cell完全显示在眼前时,contentOffset的y值
CGFloat judgeOffsetY = scrollView.contentSize.height + scrollView.contentInset.bottom - scrollView.height - self.tableView.tableFooterView.height;
if (offsetY >= judgeOffsetY) { // 最后一个cell完全进入视野范围内
// 显示footer
self.tableView.tableFooterView.hidden = NO; // 加载更多的微博数据
[self loadMoreStatus];
}
}
iOS下拉刷新和上拉刷新的更多相关文章
- IOS 开发下拉刷新和上拉加载更多
IOS 开发下拉刷新和上拉加载更多 简介 1.常用的下拉刷新的实现方式 (1)UIRefreshControl (2)EGOTTableViewrefresh (3)AH3DPullRefresh ( ...
- IOS UITableView下拉刷新和上拉加载功能的实现
在IOS开发中UITableView是非常常用的一个功能,而在使用UITableView的时候我们经常要用到下拉刷新和上拉加载的功能,今天花时间实现了简单的UITableView的下拉刷新和上拉加载功 ...
- listview下拉刷新和上拉加载更多的多种实现方案
listview经常结合下来刷新和上拉加载更多使用,本文总结了三种常用到的方案分别作出说明. 方案一:添加头布局和脚布局 android系统为listview提供了addfootview ...
- Android 5.X新特性之为RecyclerView添加下拉刷新和上拉加载及SwipeRefreshLayout实现原理
RecyclerView已经写过两篇文章了,分别是Android 5.X新特性之RecyclerView基本解析及无限复用 和 Android 5.X新特性之为RecyclerView添加Header ...
- iscroll.js 下拉刷新和上拉加载
html代码如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...
- Android 使用PullToRefresh实现下拉刷新和上拉加载(ExpandableListView)
PullToRefresh是一套实现非常好的下拉刷新库,它支持: 1.ListView 2.ExpandableListView 3.GridView 4.WebView 等多种常用的需要刷新的Vie ...
- 使用PullToRefresh实现下拉刷新和上拉加载
使用PullToRefresh实现下拉刷新和上拉加载 分类: Android2013-12-20 15:51 78158人阅读 评论(91) 收藏 举报 Android下拉刷新上拉加载PullToRe ...
- 下拉刷新和上拉加载 Swift
转载自:http://iyiming.me/blog/2015/07/05/custom-refresh-and-loading/ 关于下拉刷新和上拉加载,项目中一直使用MJRefresh(原先还用过 ...
- H5下拉刷新和上拉加载实现原理浅析
前言 在移动端H5网页中,下拉刷新和上拉加载更多数据的交互方式出现频率很高,开源社区也有很多类似的解决方案,如iscroll,pulltorefresh.js库等.下面是对这两种常见交互基本实现原理的 ...
随机推荐
- wmsys.wm_concat结果长度限制的问题
转:http://bbs.csdn.net/topics/360059765 使用wmsys.wm_concat多列合成一列遇到问题ORA-22813: 操作数值超出系统的限制 官方文档解释是总长度超 ...
- How to install Wine on Ubuntu Linux 64bit
参考地址:https://linuxconfig.org/how-to-install-wine-on-ubuntu-linux-64bit The following linux command p ...
- Android Studio项目提交(或更新)到github的方法
一 配置github登陆信息 二 上传工程到github 1. 2. 点击Share按钮 3. 点击ok按钮 状态栏提示: 4. 点击 No 按钮 5.AS右下脚弹出提示框 查看github网站,已经 ...
- sencha touch 开发环境搭建(视频)
图文文章参见: http://www.cnblogs.com/mlzs/p/3420900.html 视频共享链接 百度:http://pan.baidu.com/s/1mg5DpS8
- 完全卸载Oracle数据库软件
软件环境: 1.Windows xp+ORACLE 8.1.7 2.ORACLE安装路径为:C:\ORACLE 实现方法: 1. 开始->设置->控制面板->管理工具->服务 ...
- 跟bWAPP学WEB安全(PHP代码)--SSL(Server-Side-Include)漏洞
什么是Server-Side-Include漏洞 服务端包含漏洞是指发送指令到服务器,服务器会将指令运行完,把运行结果包含在返回文件中发送给你.利用这种漏洞可以获取服务端的信息甚至执行命令,这样的指令 ...
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十一:PS/2模块⑤ — 扩展鼠标
实验十一:PS/2模块⑤ — 扩展鼠标 当普通鼠标即三键鼠标再也无法满足需求的时候,扩展鼠标即滚轮鼠标就诞生了,然而实验十一的实验目的就是实现滚轮鼠标的驱动.不过,进入整体之前,先让我们来了解一下鼠标 ...
- 安装 SQL SERVER MsiGetProductInfo 无法检索 Product Code 1605错误 解决方案
重装数据库服务器上的SQL SERVER 2008 上遇到了以下问题 标题: SQL Server 安装程序失败. SQL Server 安装程序遇到以下错误: MsiGetProductInfo 无 ...
- php----空字符串的和NULL的区别
空字符串和null的区别是非常的大的,虽然都是没有任何东西,但是空字符串会占据一个内存,只是在这里内存里面没有东西而已,但是null就是完全不存在这个东西,他是不会开辟内存. $str1 = &quo ...
- 源代码的管理与在eclipse中使用maven进行代码测试
管理源代码的工具 开发历史记录 SVN :集中式的源代码管理工具 通常必须连到公司的服务器上才能正常工作 (提交代码,查看代码的历史记录 查看代码的分支) 在公司中开发项目时 每天必须至少提交(Com ...