#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. python引入模块时import与from ... import的区别

    import datetime是引入整个datetime包,如果使用datetime包中的datetime类,需要加上模块名的限定. import datetime print datetime.da ...

  2. 在调试安卓系统的时候需要这个 ”adb disable-verity“

    在调试设备的时候.想要对文件进行读写 于是使用adb remount 出现提示. 请使用 ”adb  disable-verity“ 于是使用adb  disable-verity 的命令. 得到如下 ...

  3. redis - java 基本操作

    import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; im ...

  4. 常用 SQL语句

    Oracle 查看所有表的名字: select table_name from user_tables; 查询特定表的名字:select * from (select table_name t fro ...

  5. sql server数据库中 INFORMATION_SCHEMA的用法

    1.查询数据库的所有表: select * from INFORMATION_SCHEMA.TABLES 2.查询表名为xxx的所有列的信息 select * from INFORMATION_SCH ...

  6. Openlayers 3 图层探查功能

    <body> <div id="map"></div> <script> var map=new ol.Map({ target:& ...

  7. Android自定义XML属性

    <?xml version="1.0" encoding="utf-8"?> <resources> <declare-style ...

  8. 二分图最大匹配 Hopcroft-Karp算法模板

    #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> ...

  9. ref和out,以及一般方法的引用参数和值参数寻解

    对与ref和out的区别,我相信很多人都知道,这里我简单罗列下: 1.首先ref和out两种类型的参数都是可以将方法内对参数的修改传递到方法外面 2.ref参数需要在传递之前初始化,out不需要,ou ...

  10. 求余区间的求和类问题 离线+线段树 HDU4228

    题目大意:给一个数组a,他的顺序是严格的单调增,然后有如下三个操作 ①加入一个val到a数组里面去,加入的位置就是a[i-1]<val<a[i+1] ②删除一个a[i]=val的值 ③查询 ...