#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的上拉刷新的更多相关文章

  1. iOS MJRefresh下拉、上拉刷新自定义以及系统详细讲解

    更新: MJRefresh 更新功能,默认根据数据来源 自动显示 隐藏footer,这个功能可以关闭 DoctorTableView.mj_footer.automaticallyHidden = N ...

  2. HBuilder/Mui开发ios使用上拉刷新导致滚动条无法使用的解决方法

    HBuilder/Mui开发的APP使用上拉刷新,当滚动到底部是会触发上拉刷新,加载更多数据.但是ios上确是一个坑,导致滚动条无法滚动. 解决方法 放弃Mui的上拉刷新,自己使用JS实现. var ...

  3. ios基础篇(二十八)—— UITableView的上拉加载

    本文主要展示一个demo实现UITableView的上拉加载数据: 先看看效果图: 接着上拉,加载更多数据: 主要实现的效果是在我们上拉结束拖拽之后,开始加载数据,数据加载的过程中有滚动轮提示用户正在 ...

  4. iOS动画进阶 - 实现炫酷的上拉刷新动效

    移动端訪问不佳,请訪问我的个人博客 近期撸了一个上拉刷新的小轮子.仅仅要遵循一个协议就能自己定义自己动效的上拉刷新和载入,我自己也写了几个动效进去,以下是一个比較好的动效的实现过程 先上效果图和git ...

  5. UITableView:下拉刷新和上拉加载更多

    [转载请注明出处] 本文将说明让UIScrollView支持"下拉刷新"和"上拉加载更多"的实现机制,并实现一个可用的tableView子类,以下主要以&quo ...

  6. 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% ...

  7. MUI - 上拉刷新/下拉加载

    新闻信息列表必备的功能,支持Table,Ul等列表. 以下是DIV版本,在安卓端或者ios端必须使用双webview模式,传送门:http://dev.dcloud.net.cn/mui/pulldo ...

  8. PullToRefreshGridView上拉刷新,下拉加载

    PullToRefreshGridView上拉刷新,下拉加载 布局: <?xml version="1.0" encoding="utf-8"?> ...

  9. Flutter学习笔记(25)--ListView实现上拉刷新下拉加载

    如需转载,请注明出处:Flutter学习笔记(25)--ListView实现上拉刷新下拉加载 前面我们有写过ListView的使用:Flutter学习笔记(12)--列表组件,当列表的数据非常多时,需 ...

随机推荐

  1. lvs + keepalived + httpd 高可用集群(转)

    实验信息和拓扑:备注:Centos 6.5 selinux –disabled iptables off ServerName Ipaddress information LVSMaster 172. ...

  2. perl的logwrapper

    来源: http://www.cnblogs.com/itech/archive/2012/09/22/2698385.html 对任何的函数将标准输出和错误输出重定向到对应的log文件. 对任何的函 ...

  3. [分享]Host文件的原理解释及应用说明

    Host文件的原理解释及应用说明   Host文件位置及打开方式:   Window系统中有个Hosts文件(没有后缀名), Windows 98系统下该文件在Windows目录,在Windows 2 ...

  4. OpenGL---------光照的基本知识

    从生理学的角度上讲,眼睛之所以看见各种物体,是因为光线直接或间接的从它们那里到达了眼睛.人类对于光线强弱的变化的反应,比对于颜色变化的反应来得灵敏.因此对于人类而言,光线很大程度上表现了物体的立体感. ...

  5. c# 获取客户端ip

    针对 HttpContext.Current.Request.UserHostAddress 如果客户使用的是代理,将获取不到真是的ip 要想透过代理服务器取得客户端的真实IP地址,就要使用 Requ ...

  6. Bootstrap学习 - 全局CSS样式

    栅格Grid  <!-行(row)”必须包含在 .container (固定宽度)或 .container-fluid (100% 宽度)中-> <div class="c ...

  7. 微软企业库3.1DIY编译使用(数据库连接符写在企业库DLL里)

    1.在winform项目app.config文件中去掉"PublicKeyToken=b03f5f7f11d50a3a"(不然无法加载使用新编译的企业库DLL文件) 2.在企业库所 ...

  8. PHP资源类型

    在PHP中,我们经常使用到资源类型变量.例如:mysql连接.文件句柄等. 这些变量无法使用标量来表示,那么在Zend内核中是如何将PHP中的资源变量与C语言中的资源衔接的呢? 一.资源变量在PHP中 ...

  9. 用telnet命令,SMTP发送邮件

    邮件的发送是基于smtp协议的.邮件客户端软件给smtp服务器传送邮件和smtp服务器之间传送邮件也都是基于smtp协议的.邮件客户端软件接受邮件是主要基于pop3协议的. 下面介绍利用windows ...

  10. java war 打包、解压命令

    经常将工程打包成war包,打包如下: // 将当前目录打包成war包 jar cvf temp.war . 命令格式: java cvf 打包文件名称 要打包的目录 打包文件保存路径 解压自然就是: ...