下拉刷新控件:UIRefreshControl

1、具体类信息:

@interface UIRefreshControl : UIControl //继承控制类

- (instancetype)init;

@property (nonatomic, readonly, getter=isRefreshing) BOOL refreshing; //是否可以刷新

@property (nonatomic, retain) UIColor *tintColor; //控件颜色

@property (nonatomic, retain) NSAttributedString *attributedTitle; //控件属性标题

- (void)beginRefreshing;//开始刷新

- (void)endRefreshing ;//结束刷新

@end

2、用途:

它一般用来刷新下载数据并显示出来,例如上网时的刷新。当然,它可以搭配着表格视图tableView,进行下拉时,表格数据可以刷新加载下载的数据。另外,它也是表格视图控制器UITableViewController的特有属性。

 
下面就来具体举两个例子,都是刷新显示表格中的数据:
 
例子1:通过继承表格视图控制器UITableViewController来使用下拉刷新控件UIRefreshControl,此时tableView和RefreshControl刷新控件为表格视图控制器的特有属性。
 
前期故事板布局处理:
<1>删除故事板中的的控制器,然后拖入一个UITableViewController
 
 
<2>将ViewController类继承表格视图控制器类UITableViewController
 
 
<3>将UITableViewController控制器关联对应的类ViewController
 
 
好了,接下来就是代码的书写了
//1.定义一个可变的数组,用来存储加载的数据
 #import "ViewController.h"
@interface ViewController ()
@property (strong,nonatomic)NSMutableArray *arrayM;
@end

//2.懒加载初始化数组

 -(NSMutableArray*)arrayM
{
if(!_arrayM)
{
_arrayM = [NSMutableArray array];
}
return _arrayM;
}

//3.初始化刷新控件,并添加控件事件

 - (void)viewDidLoad {
[super viewDidLoad]; //创建刷新控件
self.refreshControl = [[UIRefreshControl alloc]initWithFrame:CGRectMake(, , self.tableView.frame.size.width, )]; //将刷新控件添加到表格视图表头中
[self.tableView.tableHeaderView addSubview:self.refreshControl]; //添加刷新事件
[self.refreshControl addTarget:self action:@selector(loadData:) forControlEvents:UIControlEventValueChanged];
}

//4.封装一个准备加载数据的方法

 -(void)prepareData
{
for (int i=; i<; i++)
{
NSString *product = [NSString stringWithFormat:@"产品-%d",arc4random_uniform()];
[self.arrayM addObject:product]; //整体刷新表格
[self.tableView reloadData];
}
}

//5、实现刷新控件的事件

 #pragma mark -loadData
-(void)loadData:(UIRefreshControl*)sender
{
//加载数据
[self prepareData]; //结束刷新
[self.refreshControl endRefreshing];
}

//6、实现表格视图数据源协议的相关方法,显示数据再表格中

 #pragma mark -<UITableViewDataSource>
//行数
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.arrayM.count;
}
//设置每一个单元格的内容
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//1.根据reuseIdentifier,先到对象池中去找重用的单元格对象
static NSString *reuseIdentifier = @"Cell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
//2.如果没有找到,自己创建单元格对象
if(cell == nil)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
}
//3.设置单元格对象的内容
cell.textLabel.text = [self.arrayM objectAtIndex:indexPath.row];
return cell;
}

演示结果如下:

没有任何操作时:                          下拉刷新时:多了三条数据

     

 
例子2:纯代码在ViewController类中创建tableview和UIRefreshControl,然后实现下拉刷新操作显示结果
具体代码如下:
//1.实现数据源协议并定义需要的属性
 #import "ViewController.h"

 @interface ViewController ()<UITableViewDataSource>
@property (strong,nonatomic)UITableView *tableView;
@property (strong,nonatomic)UIRefreshControl *refreshControl;
@property (strong,nonatomic)NSMutableArray *arrayM;
@end

//2.- (void)viewDidLoad方法完成如下代码:

※创建表格视图,并将其添加到view视图中

     self.tableView = [[UITableView alloc]initWithFrame:self.view.bounds];
[self.view addSubview:self.tableView];

※创建刷新控件,并将其添加到表格视图中

 self.refreshControl = [[UIRefreshControl alloc]initWithFrame:CGRectMake(, , self.tableView.frame.size.width, )];
self.refreshControl.tintColor = [UIColor redColor];
[self.tableView addSubview:self.refreshControl];

※初始化数组,并准备数据

  self.arrayM = [NSMutableArray array];
for(int i=; i<; i++)
{
NSString *book = [NSString stringWithFormat:@"book-%d",i+];
[self.arrayM addObject:book];
}

※设置数据源并添加刷新控件事件

 self.tableView.dataSource = self;
[self.refreshControl addTarget:self action:@selector(load:) forControlEvents:UIControlEventValueChanged];

//3、实现刷新事件加载数据

 #pragma mark-load
-(void)load:(UIRefreshControl*)sender
{
//开始刷新加载数据
NSString *room = [NSString stringWithFormat:@"room-%d",arc4random_uniform()];
[self.arrayM addObject:room];
[self.tableView reloadData]; //结束刷新
[self.refreshControl endRefreshing];
}

//4、实现数据源协议的需要的方法,显示数据再表格

 #pragma mark -<UITableViewDataSource>
//行
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.arrayM.count;
}
//设置每一个单元格的内容
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//1.根据reuseIdentifier,先到对象池中去找重用的单元格对象
static NSString *reuseIdentifier = @"Cell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
//2.如果没有找到,自己创建单元格对象
if(cell == nil)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
}
//3.设置单元格对象的内容
cell.textLabel.text = [self.arrayM objectAtIndex:indexPath.row];
return cell;
}

演示结果如下:

没有任何操作时:                                                                下拉刷新时:

           

刷新结束后:多了一条room-1数据

 

iOS:下拉刷新控件UIRefreshControl的详解的更多相关文章

  1. IOS6.0自带下拉刷新控件UIRefreshControl

    1.UIRefreshControl必需要在IOS6.0以后才干使用,同一时候他仅仅能在UITableViewController类中才干够使用 2.使用比較简单 self.refreshContro ...

  2. 新浪微博客户端(18)-集成下拉刷新控件UIRefreshControl

    HomeViewController.m - (void)setupPullToRefreshView { UIRefreshControl *refreshControl = [[UIRefresh ...

  3. android官方下拉刷新控件SwipeRefreshLayout的使用

    可能开发安卓的人大多数都用过很多下拉刷新的开源组件,但是今天用了官方v4支持包的SwipeRefreshLayout觉得效果也蛮不错的,特拿出来分享. 简介:SwipeRefreshLayout组件只 ...

  4. 上拉加载下拉刷新控件WaterRefreshLoadMoreView

    上拉加载下拉刷新控件WaterRefreshLoadMoreView 效果: 源码: // // SRSlimeView // @author SR // Modified by JunHan on ...

  5. Android仿苹果版QQ下拉刷新实现(一) ——打造简单平滑的通用下拉刷新控件

    前言: 忙完了结婚乐APP的开发,终于可以花一定的时间放在博客上了.好了,废话不多说,今天我们要带来的效果是苹果版本的QQ下拉刷新.首先看一下目标效果以及demo效果:      因为此效果实现的步骤 ...

  6. [Swift通天遁地]二、表格表单-(4)使用系统自带的下拉刷新控件,制作表格的下拉刷新效果

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  7. [Android]下拉刷新控件RefreshableView的实现

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4172483.html 需求:自定义一个ViewGroup,实现 ...

  8. android SwipeRefreshLayout google官方下拉刷新控件

    下拉刷新功能之前一直使用的是XlistView很方便我前面的博客有介绍 SwipeRefreshLayout是google官方推出的下拉刷新控件使用方法也比较简单 今天就来使用下SwipeRefres ...

  9. Android PullToRefresh下拉刷新控件的简单使用

    PullToRefresh这个开源库早就听说了,不过一直没用过.作为一个经典的的开源库,我觉得还是有必要认识一下. 打开github上的网址:https://github.com/chrisbanes ...

随机推荐

  1. <<Javascript Patterns>>阅读笔记 -- 第2章 基本技巧(一)

    第一次写这种东西, 有些生涩和蹩脚, 也是为了自己在表达或是总结方面有所提高, 同时为看过的东西留个痕迹, 以便日后查阅. 有错误或是不妥的地方, 还望各位指正, 谢谢! 第1章 简介 本章主要介绍了 ...

  2. vue框架muse-ui官网文档主题错误毕竟【01】

    在使用了element-ui后,总觉得不尽兴,再学一个响应式的muse-ui发现是个小众框架,但是我很喜欢. 指出官网文档里的主题使用描述错误. 首先,在vue-cli里安装raw-loader:np ...

  3. Centos7中一次性安装开发者工具

    这里使用组安装包,一次性安装所有开发者工具. 1.查看有那些组安装包可用. yum grouplist | more 2.搜索一下有哪些和development有关. yum grouplist | ...

  4. 使用FlashPaper在线转换.doc为.swf_实用技巧

    https://yq.aliyun.com/ziliao/160044?spm=5176.8246799.0.0.JBbqjY 摘要: 本文讲的是使用FlashPaper在线转换.doc为.swf_实 ...

  5. Anaconda 安装 pydot 绘制树状图

    在***的前提下,控制台输入以下命令: 首先安装 graphviz,这是计算的核心 package conda install graphviz 再安装 pydot ,这是 graphviz 的 py ...

  6. JavaWeb 之 AJAX

    Ajax ajax:AJAX 是与服务器交换数据的艺术,它在不重载全部页面的情况下,实现了对部分网页的更新 AJAX:Asynchronous JavaScript and XML,异步 javasc ...

  7. RxSwift 系列(八)

    前言 本篇文章我们将学习RxSwift中的错误处理,包括: catchErrorJustReturn catchError retry retry(_:) catchErrorJustReturn 遇 ...

  8. CF336B[思维题]

    题目链接[http://codeforces.com/problemset/problem/336/B] 题意:画出2*m个圆圈,编号为1-m的圆圈在同一行相邻,编号在m+1-2*m的圆圈在同一行,有 ...

  9. 【BZOJ 2121】 (字符串DP,区间DP)

    2121: 字符串游戏 Description BX正在进行一个字符串游戏,他手上有一个字符串L,以及其他一些字符串的集合S,然后他可以进行以下操作:对于一个在集合S中的字符串p,如果p在L中出现,B ...

  10. luogu P1011 车站

    题目描述 火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人.从第3站起( ...