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库等.下面是对这两种常见交互基本实现原理的 ...
随机推荐
- 零基础读懂视频播放器控制原理——ffplay播放器源代码分析
版权声明:本文由张坤原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/535574001486630869 来源:腾云阁 ht ...
- SSL & TLS & STARTTLS
https://www.fastmail.com/help/technical/ssltlsstarttls.html SSL vs TLS vs STARTTLS There's often qui ...
- Cordova 3.3 开发环境搭建(视频)
图文文章参见: http://www.cnblogs.com/mlzs/p/3332199.html 视频共享链接 百度:http://pan.baidu.com/s/1c0EHfqC
- C# 未能加载文件或程序集“mysql.data”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
报错信息: 在web.config中已经加了以下代码. <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-co ...
- 关于hp proliant sl210t服务器raid 1阵列配置
hp proliant sl210t服务器,一般都会带有两个阵列卡 一个服务器自带的Dynamic Smart Array B120i RAID控制器,一个为Slot卡槽上的Smart Array P ...
- Log4net配置之Winform项目
具体方法如下: 一.App.config配置 <?xml version="1.0" encoding="utf-8" ?> <configu ...
- slam学习资源
从零开始学slam: http://blog.csdn.net/akunainiannian/article/details/45363731 史上最全的SLAM学习资料收集 http://www. ...
- HDU 2187 - 悼念512汶川大地震遇难同胞——老人是真饿了 - [大水题]
讲真,这么水的题,我都不怎么好意思扔到博客上来,但是没办法啊,我总得证明一下今天上午我不是在寝室里瞎玩浪费掉的…… 思路就是,把米按单价从小到大排个序,便宜的买的越多越好,直到钱花光为止……我真的都不 ...
- python读取文件行号和内容的便捷方法
处理数据时候,需要得到数据所在和行号,使用enumerate时便捷的方法: file = open('file.txt','r') for (num,value) in enumerate(file) ...
- pyAudio介绍
概要 pyaudio有这么几个功能: - 提取特征 - 训练并且使用分类器 - 语音分割功能 - 内容关系可视化 python实现,好处有这么几个 - 适合做计算分析类型操作(编码少,效率不低) - ...