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)--列表组件,当列表的数据非常多时,需 ...
随机推荐
- fp oo
http://blog.enfranchisedmind.com/2009/05/scala-not-functional/
- wpf计时器
wpf应用程序间隔一段时间触发一个事件,代码如下: public MainWindow() { InitializeComponent(); DispatcherTimer timer = new D ...
- ng-option小解
ng-option 有数组,对象两种情况,但目前只接触过数组 数组: label for value in array 分为一般数组和对象数组 一般数组: <select ng-model=&q ...
- mysql的登录和备份
mysql -h xxx.xxx.xxx.xxx -u root -p -h 指出服务器名 若是localhost则是指本机 -u 指出用户名 root是默认的最高权限用户名 -p指出密码 不填就指密 ...
- ACE_Time_Value
头文件“Time_Value.h” 为了兼容各个平台的时间特性,ACE Reactor框架提供了ACE_Time_Value类.ACE_Time_Value的关键方法见下图3.2和表3.2.3.3: ...
- 视频录制SurfaceView
package com.bw.videorecorder; import java.io.File;import java.io.IOException; import android.media.M ...
- AI 人工智能 探索 (五)
我们把做好的 角色 拖到 内存池,如图所示,这样我们可以动态生成角色并给予他 寻路目标. //逗留碰撞 void OnTriggerStay(Collider other) { if (other.t ...
- 以图搜图(一):Python实现dHash算法(转)
近期研究了一下以图搜图这个炫酷的东西.百度和谷歌都有提供以图搜图的功能,有兴趣可以找一下.当然,不是很深入.深入的话,得运用到深度学习这货.Python深度学习当然不在话下. 这个功能最核心的东西就是 ...
- 用python计算md5,sha1,crc32
Linux下计算md5sum,sha1sum,crc: 命令 输出 $md5sum hello f19dd746bc6ab0f0155808c388be8ff0 hello $sha1sum hel ...
- pat L1-006. 连续因子
L1-006. 连续因子 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一个正整数N的因子中可能存在若干连续的数字.例如630 ...