iOS之UITableView的上拉刷新
#import "ViewController.h"
#import "UITableView+PullRefresh.h" @interface ViewController ()<UITableViewDataSource, UITableViewDelegate> @property (strong, nonatomic)NSMutableArray *arrData;
@property (strong, nonatomic)NSMutableArray *arrTmp; @property (strong, nonatomic)UITableView *tabv;
@end @implementation ViewController - (void)viewDidLoad
{
[super viewDidLoad]; // 初始化临时动态集合
self.arrTmp = [NSMutableArray array]; // 获取数据源
self.arrData = [NSMutableArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"2.只包含地级市" ofType:@"plist"]]; // 创建表视图
self.tabv = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain]; // 指定代理
self.tabv.dataSource = self;
self.tabv.delegate = self; // 注册唯一标识
[self.tabv registerClass:[UITableViewCell class] forCellReuseIdentifier:@"reuse"]; // 添加到主视图
[self.view addSubview:self.tabv]; // 启动
[self.tabv setup];
// 加载
[self.tabv setLoadMoreEnable:YES];
// 避免强引用循环
__weak typeof(self)weakSelf = self;
// 回调
[self.tabv setLoadingBlock:^(BOOL pullDown)
{
[weakSelf sendMessage:!pullDown];
}];
} - (void)sendMessage:(BOOL)isloadMore
{
if (!isloadMore)
{
[self.arrTmp removeAllObjects];
}
// 变量的声明只会走一次,因此即使是在函数或者block中声明的静态变量赋初值也只会走一次,所以多次调用如果是static每次调用是不会被清空的会被保存下来
// NSInteger num = 0; // 因为indexPath所以都一样,初值赋值多少都一样(但需要赋值为0,否则会提前崩),静态和普通变量都一样:从集合数据源下标的row=0开始
static NSInteger num = ;
// 控制结束和每次刷新的数量
static NSInteger range = ;
// 每次刷新都是把数据源的数据添加到临时的动态集合
for (NSInteger i = num; i < num+range; i++)
{
[self.arrTmp addObject:self.arrData[i]];
}
// 判断集合数量避免下标越界程序崩溃
if (self.arrData.count-self.arrTmp.count<range)
{
range = self.arrData.count - self.arrTmp.count;
}else //取差赋值给添加刷新数量:小于默认刷新数量时
{
num += range;
}
// 调用方法刷新临时集合内数据源
if (self.arrData.count > self.arrTmp.count)
{
[self.tabv setLoadMoreEnable:YES];
}else //等于时也停止加载
{
[self.tabv setLoadMoreEnable:NO];
}
// 刷新显示在tabView上数据
[self.tabv reloadData];
} // 显示row的数量
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// tmp的数量:默认先加载20条
if (!self.arrTmp.count)
{
return ;
}else // 刷新即显示临时集合内数据:把数据源分段添加到临时集合
{
return self.arrTmp.count;
}
}
// 显示数据
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuse" forIndexPath:indexPath]; if (self.arrData.count!=indexPath.row)
{
cell.textLabel.text = self.arrData[indexPath.row];
} return cell;
}
@end
iOS之UITableView的上拉刷新的更多相关文章
- iOS MJRefresh下拉、上拉刷新自定义以及系统详细讲解
更新: MJRefresh 更新功能,默认根据数据来源 自动显示 隐藏footer,这个功能可以关闭 DoctorTableView.mj_footer.automaticallyHidden = N ...
- HBuilder/Mui开发ios使用上拉刷新导致滚动条无法使用的解决方法
HBuilder/Mui开发的APP使用上拉刷新,当滚动到底部是会触发上拉刷新,加载更多数据.但是ios上确是一个坑,导致滚动条无法滚动. 解决方法 放弃Mui的上拉刷新,自己使用JS实现. var ...
- ios基础篇(二十八)—— UITableView的上拉加载
本文主要展示一个demo实现UITableView的上拉加载数据: 先看看效果图: 接着上拉,加载更多数据: 主要实现的效果是在我们上拉结束拖拽之后,开始加载数据,数据加载的过程中有滚动轮提示用户正在 ...
- iOS动画进阶 - 实现炫酷的上拉刷新动效
移动端訪问不佳,请訪问我的个人博客 近期撸了一个上拉刷新的小轮子.仅仅要遵循一个协议就能自己定义自己动效的上拉刷新和载入,我自己也写了几个动效进去,以下是一个比較好的动效的实现过程 先上效果图和git ...
- UITableView:下拉刷新和上拉加载更多
[转载请注明出处] 本文将说明让UIScrollView支持"下拉刷新"和"上拉加载更多"的实现机制,并实现一个可用的tableView子类,以下主要以&quo ...
- IOS快速集成下拉上拉刷新
http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5% ...
- MUI - 上拉刷新/下拉加载
新闻信息列表必备的功能,支持Table,Ul等列表. 以下是DIV版本,在安卓端或者ios端必须使用双webview模式,传送门:http://dev.dcloud.net.cn/mui/pulldo ...
- PullToRefreshGridView上拉刷新,下拉加载
PullToRefreshGridView上拉刷新,下拉加载 布局: <?xml version="1.0" encoding="utf-8"?> ...
- Flutter学习笔记(25)--ListView实现上拉刷新下拉加载
如需转载,请注明出处:Flutter学习笔记(25)--ListView实现上拉刷新下拉加载 前面我们有写过ListView的使用:Flutter学习笔记(12)--列表组件,当列表的数据非常多时,需 ...
随机推荐
- ubuntu 自动获取ip的怎么设置
ubuntu以DHCP方式配置网卡自动获取ip编辑文件/etc/network/interfaces:sudo vi /etc/network/interfaces并用下面的行来替换有关eth0的行: ...
- UICollectionView之自定义Layout
#import <UIKit/UIKit.h> @interface WQViewController : UIViewController - (id)initWithFrame:(CG ...
- error while loading shared libraries: libmcrypt.so.4
/usr/local/php/sbin/php-fpm: error while loading shared libraries: libmcrypt.so.4: cannot open share ...
- UIKit控件直接显示网页文字内容
NSString *html = @"<bold>Hello</bold> Now<br> <em>iOS</em> can cr ...
- 贪心<haonan>
题意: 有一列数,每次在相邻的两个书里面选择一个大数留下,同时ans+大数.问题是,求ans的最小值. 题解: 如果a[i]>a[i-1],那么ans+=a[i]; 如果a[i]>=a[i ...
- libmysql.dll 找不到
在用C#开发的时候,需要连接MySQL ,系统提示 libmysql.dll 找不到模块. 我们可以找到 MySQL安装文件夹下的 C:\Program Files\MySQL\MySQL Ser ...
- windows下python+Django+eclipse开发环境的配置
1.JDK环境的安装 在http://www.java.com/zh_CN/download/faq/develop.xml 页面下,点击JDK下载,下载所需的jdk版本.直接点击安装即可. 2.py ...
- Dom+2016/4/20
元素.parentNode父节点 offsetParent
- HDU 2102 A计划 经典搜索
A计划 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissio ...
- Django -- Views and URLconf
1 创建工程 django-admin startproject mysite && cd mysite 2 创建应用 python manage.py startapp blog 3 ...