2019独角兽企业重金招聘Python工程师标准>>>

需要包装viewController视图

viewController.m代码全部粘贴即可使用

//

//  ViewController.m

//  练习 刷新数据

//

//  Created by qianfeng on 16/2/24.

//  Copyright © 2016年 mc. All rights reserved.

//  QQ 937496430

#define SCR_W self.view.frame.size.width

#define SCR_H self.view.frame.size.height

#import "ViewController.h"

@interface ViewController () <UITableViewDataSource,UITableViewDelegate>

@property (nonatomic ,strong)UITableView * tableView;

@property (nonatomic,retain)NSMutableArray *dataArray;

@property (nonatomic)NSInteger currentPage; //当前页数

@property (nonatomic)NSInteger refreshState; //0初始状态 //1已经上拉 需要松手 //2正在获取数据状态

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

[self loadData];

[self createTable];

}

- (void)loadData

{

if(_dataArray == nil)

{

_dataArray = [[NSMutableArray alloc] init];

}

for (int index = 0; index < 20; index++) {

NSString *str = [NSString stringWithFormat:@"第%ld页第%d个Cell",_currentPage,index];

[_dataArray addObject:str];

}

_currentPage++;

dispatch_async(dispatch_get_main_queue(), ^{

[_tableView reloadData];

_refreshState = 0;

[self updateRefreshView];

});

}

- (void)createTable

{

_tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, SCR_W, SCR_H)];

[self.view addSubview:_tableView];

_tableView.tableFooterView = [self createFooterView];

self.tableView.delegate = self;

self.tableView.dataSource = self;

}

// 创建footer视图  返回UIView

- (UIView*)createFooterView

{

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 40)];

[view setBackgroundColor:[UIColor whiteColor]];

UILabel *lable = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 40)];

[lable setTextAlignment:NSTextAlignmentCenter];

[lable setText:@"上拉刷新"];

[lable setTextColor:[UIColor darkGrayColor]];

lable.tag = 100;

[view addSubview:lable];

return view;

}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

{

return 50;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

return _dataArray.count;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CELL_ID"];

if(cell == nil){

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CELL_ID"];

}

cell.backgroundColor = [UIColor grayColor];

cell.textLabel.text =  _dataArray[indexPath.row];

return cell;

}

//刷新数据

- (void)updateRefreshView

{

UIView *refreshV = _tableView.tableFooterView;

UILabel *titleL = (UILabel*)[refreshV viewWithTag:100];

if(_refreshState == 0)

{

[titleL setText:@"上拉刷新数据"];

}else if(_refreshState == 1){

[titleL setText:@"松手即刷新数据"];

}else if(_refreshState == 2){

[titleL setText:@"正在下载数据..."];

}

}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

if ((_refreshState == 0)&&(scrollView.contentOffset.y + _tableView.frame.size.height > scrollView.contentSize.height + 50)) {

//scrollView.contentSize.height 加 50 是为了防止滑动过快 导致刷新

_refreshState = 1;

[self updateRefreshView];

}

}

//滚动视图已经结束拖动

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

{

if(_refreshState == 1)

{

_refreshState = 2;

[self updateRefreshView];

[self performSelector:@selector(loadData) withObject:nil afterDelay:3]; //延迟3秒 为了更直观的显示 _refreshState 的状态

// [self loadData];

}

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

转载于:https://my.oschina.net/937496430/blog/620131

自己手写代码实现下拉刷新(对于小项目第三方库太占资源)相关推荐

  1. Java txt 下拉刷新_手写上拉加载,下拉刷新(小demo)

    背景 使用过很多下拉刷新,上拉加载的插件,虽然也知道一点原理,但似乎一直不太完全能理解它,闲来无事,手写一个,感受下,借鉴了better-scroll的源码,功能当然相差甚远,也只是个简易版的实现,大 ...

  2. hooks taro 下拉刷新_小程序自定义下拉刷新(Taro版)

    在考虑实现自定义的下拉刷新组件的时候,首先要明确,这个算是一种hack方案.并不是说自定义的有多么好,反而自定义的下拉刷新在android下会有细微的卡顿(我这种实现方式).所以尽量还是用小程序自带的 ...

  3. 小程序中scroll-view的下拉刷新和小程序页面的下拉刷新开启方法

    scroll-view的下拉刷新 video.wxml中 <scroll-view class="videoScroll" scroll-y="true" ...

  4. 如何实现上拉加载,下拉刷新?

    如何实现上拉加载,下拉刷新? 一.前言 二.实现原理 上拉加载 下拉刷新 三.案例 小结 一.前言 下拉刷新和上拉加载这两种交互方式通常出现在移动端中 本质上等同于PC网页中的分页,只是交互形式不同 ...

  5. 【前端知识之JS】如何实现上拉加载和下拉刷新

    前言 本系列主要整理前端面试中需要掌握的知识点.本节介绍如何实现上拉加载和下拉刷新. 文章目录 前言 一.介绍 二.实现原理 1.上拉加载 2.下拉刷新 一.介绍 下拉刷新和上拉加载这两种交互方式通常 ...

  6. 面试官:JavaScript如何实现上拉加载,下拉刷新?

    一.前言 下拉刷新和上拉加载这两种交互方式通常出现在移动端中 本质上等同于PC网页中的分页,只是交互形式不同 开源社区也有很多优秀的解决方案,如iscroll.better-scroll.pullto ...

  7. PullToRefreshListView下拉刷新与上拉载入

    [声明]转载请注明出处.此文出自指尖飞落的博客:http://blog.csdn.net/huntersnail --尊重作者.知识无价.交流无限! 前言:下拉刷新是Android项目中常常要用到的东 ...

  8. Javascript下拉刷新

    Html相关代码 <!DOCTYPE html> <html lang="en"><head><meta charset="ut ...

  9. Android ListView 实现下拉刷新上拉加载

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/39965327 1.简介 无疑,在Android开发中,ListView是使用非常频 ...

最新文章

  1. 最大限度地减少块输出中间结果的计算和存储
  2. 开源!开源!我写的Anto.exe C#代码自动生成工具.欢迎下载。。
  3. 2017年计算机应用题库,2017年自学考试管理系统中计算机应用题库精选试题6
  4. KVM之EPT与影子页表(七)
  5. Oracle安装步骤及PL/SQL Developer连接数据库
  6. 【书评】RHCSA/RHCE Red Hat Linux 认证学习指南(第6版)EX200 EX300
  7. 通往自由之路 | 云队友远程办公征文活动
  8. 使用js实现换肤功能
  9. Asp.Net 网站一键部署技术(下)
  10. 设置透明色有残留怎么办_冬天车玻璃结冰,车被冻住了怎么办?据说只有10%的人做对了...
  11. 用r语言分析janeausten_R语言相关性分析
  12. X.509,RSA,PKCS 普及
  13. 20道经典Java面试基础题
  14. system libzip must be upgraded to version >= 0.11
  15. 在Vue2中使用百度脑图kityminder-core
  16. 只会用ping测试网络通不通?高级网工还会这么用
  17. 程序人生 | 阿里面试小记
  18. js+java 实现图片在线预览功能
  19. 2016年7月编程语言排行榜
  20. 医院信息系统网络安全等级保护2.0标准解读

热门文章

  1. pytest命令行传参
  2. Python--print用法汇总
  3. android 应用区高度,Android创建显示区高度可以调整的ScrollView
  4. python socket 游戏_python socket模拟游戏开服
  5. java中跳转页面的干法_java – 有没有一种干法来整合RowMappers的相同代码?
  6. 清空运行中的jar 日志_Java日志体系权威总结
  7. 安卓案例:标准化测试
  8. Java案例:装载与发射子弹问题
  9. think php 3.3.3看云,入口文件 · ThinkPHP3.2.3完全开发手册 · 看云
  10. 2017.3.25 最长递增子序列 失败总结