iOS:下拉刷新控件UIRefreshControl的详解

简介:

下拉刷新控件: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.定义一个可变的数组,用来存储加载的数据
1 #import "ViewController.h"
2 @interface ViewController ()
3 @property (strong,nonatomic)NSMutableArray *arrayM;
4 @end

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

复制代码
1 -(NSMutableArray*)arrayM
2 {
3     if(!_arrayM)
4     {
5         _arrayM = [NSMutableArray array];
6     }
7     return _arrayM;
8 }
复制代码

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

复制代码
 1 - (void)viewDidLoad {
 2     [super viewDidLoad];
 3     
 4     //创建刷新控件
 5     self.refreshControl = [[UIRefreshControl alloc]initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 100)];
 6     
 7     //将刷新控件添加到表格视图表头中
 8     [self.tableView.tableHeaderView addSubview:self.refreshControl];
 9     
10     //添加刷新事件
11     [self.refreshControl addTarget:self action:@selector(loadData:) forControlEvents:UIControlEventValueChanged];
12 }
复制代码

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

复制代码
 1 -(void)prepareData
 2 {
 3     for (int i=0; i<3; i++)
 4     {
 5         NSString *product = [NSString stringWithFormat:@"产品-%d",arc4random_uniform(10)];
 6         [self.arrayM addObject:product];
 7         
 8         //整体刷新表格
 9         [self.tableView reloadData];
10     }
11 }
复制代码

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

复制代码
1 #pragma mark -loadData
2 -(void)loadData:(UIRefreshControl*)sender
3 {
4     //加载数据
5     [self prepareData];
6     
7     //结束刷新
8     [self.refreshControl endRefreshing];
9 }
复制代码

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

复制代码
 1 #pragma mark -<UITableViewDataSource>
 2 //行数
 3 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 4 {
 5     return self.arrayM.count;
 6 }
 7 //设置每一个单元格的内容
 8 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 9 {
10     //1.根据reuseIdentifier,先到对象池中去找重用的单元格对象
11     static NSString *reuseIdentifier = @"Cell";
12     UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
13     //2.如果没有找到,自己创建单元格对象
14     if(cell == nil)
15     {
16         cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
17     }
18     //3.设置单元格对象的内容
19     cell.textLabel.text = [self.arrayM objectAtIndex:indexPath.row];
20     return cell;
21 }
复制代码

演示结果如下:

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

     

 
例子2:纯代码在ViewController类中创建tableview和UIRefreshControl,然后实现下拉刷新操作显示结果
具体代码如下:
//1.实现数据源协议并定义需要的属性
复制代码
1 #import "ViewController.h"
2 
3 @interface ViewController ()<UITableViewDataSource>
4 @property (strong,nonatomic)UITableView *tableView;
5 @property (strong,nonatomic)UIRefreshControl *refreshControl;
6 @property (strong,nonatomic)NSMutableArray *arrayM;
7 @end
复制代码

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

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

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

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

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

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

复制代码
1  self.arrayM = [NSMutableArray array];
2     for(int i=0; i<5; i++)
3     {
4         NSString *book = [NSString stringWithFormat:@"book-%d",i+1];
5         [self.arrayM addObject:book];
6     }
复制代码

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

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

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

复制代码
 1 #pragma mark-load
 2 -(void)load:(UIRefreshControl*)sender
 3 {
 4     //开始刷新加载数据
 5     NSString *room = [NSString stringWithFormat:@"room-%d",arc4random_uniform(10)];
 6     [self.arrayM addObject:room];
 7     [self.tableView reloadData];
 8     
 9     //结束刷新
10     [self.refreshControl endRefreshing];
11 }
复制代码

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

复制代码
 1 #pragma mark -<UITableViewDataSource>
 2 //
 3 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 4 {
 5     return self.arrayM.count;
 6 }
 7 //设置每一个单元格的内容
 8 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 9 {
10     //1.根据reuseIdentifier,先到对象池中去找重用的单元格对象
11     static NSString *reuseIdentifier = @"Cell";
12     UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
13     //2.如果没有找到,自己创建单元格对象
14     if(cell == nil)
15     {
16         cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
17     }
18     //3.设置单元格对象的内容
19     cell.textLabel.text = [self.arrayM objectAtIndex:indexPath.row];
20     return cell;
21 }
复制代码

 演示结果如下:

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

           

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

 
程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!


本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4839111.html,如需转载请自行联系原作者
目录
相关文章
|
7月前
|
iOS开发
iOS 利用贝塞尔曲线实现Q弹的下拉刷新
iOS 利用贝塞尔曲线实现Q弹的下拉刷新
27 0
|
7月前
|
iOS开发
iOS 多个滚动控件嵌套Demo
iOS 多个滚动控件嵌套Demo
39 0
|
11月前
|
iOS开发
iOS短信验证码控件,自动输入回调两次解决办法
iOS短信验证码控件,自动输入回调两次解决办法
318 0
|
iOS开发
IOS的UITableView控件简单使用
IOS的UITableView控件简单使用
124 0
|
iOS开发
iOS开发 - 写一个刷新的控件(未封装,适合新手学习,查看原理)
iOS开发 - 写一个刷新的控件(未封装,适合新手学习,查看原理)
128 0
iOS开发 - 写一个刷新的控件(未封装,适合新手学习,查看原理)
|
iOS开发
iOS开发 - 让tableView不能下拉刷新,可以上拉加载
iOS开发 - 让tableView不能下拉刷新,可以上拉加载
260 0
|
iOS开发
iOS开发-加在透明视图上的控件会透明
iOS开发-加在透明视图上的控件会透明
113 0
|
安全 iOS开发
iOS小技能:下拉刷新控件的适配
1. 下拉顶部背景色设置: 往tableView的父控件添加拉伸背景视图 2. present 半屏适配 iOS13 modalPresentationStyle属性默认不是全屏样式`UIModalPresentationFullScreen`,而是半屏样式,需要根据需求手动设置。 present 半屏,会导致列表下拉刷新失效。
159 0
iOS小技能:下拉刷新控件的适配
|
iOS开发
iOS小技能:自动布局实现兄弟控件N等分且宽高比例是1:N(xib 上实现)
本文为 iOS视图约束专题的第三篇:xib上使用自动布局教程
140 0
|
数据可视化 程序员 iOS开发
iOS开发:用XIB拖控件关联时报错:“Could not insert new outlet connection…”解决方法
在iOS开发过程中,尤其是iOS开发初期,会遇到各种各样的错误,有些错误是开发者的不熟悉或者疏忽大意造成的,还有些是无厘头的错误,可以通过重启Xcode或者重启电脑就可解决。
211 0
iOS开发:用XIB拖控件关联时报错:“Could not insert new outlet connection…”解决方法