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数据

时间: 2024-10-26 07:53:36

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

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

1.UIRefreshControl必须要在IOS6.0以后才能使用,同时他只能在UITableViewController类中才可以使用 2.使用比较简单 self.refreshControl = [[UIRefreshControl alloc]initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 100)]; [self.refreshControl addTarget:self action:@selector(

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

HomeViewController.m - (void)setupPullToRefreshView { UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; [refreshControl addTarget:self action:@selector(refreshNewData:) forControlEvents:UIControlEventValueChanged]; [self.tableView a

iOS表示图下拉刷新控件

UIRefreshControl用的是这个控件.UITableViewController中有refreshControl这个属性. 表格的初始化和数据设置与常规一致. 1:初始化UIRefreshControl控件,并绑定下拉事件 //添加下拉刷新控件 UIRefreshControl *rc=[[UIRefreshControl alloc] init]; rc.attributedTitle = [[NSAttributedString alloc] initWithString:@"下拉

iOS.访问 Web Service.使用下拉刷新控件

#import <UIKit/UIKit.h> #import "T20140628025702NSNumber+Message.h" #import "T20140628025702NSString+URLEncoding.h" @interface T20140628025702ViewController : UITableViewController @property (nonatomic,strong) NSMutableArray *lis

自定义下拉刷新控件

一.功能效果 1.在很多app中,在信息展示页面,当我们向下拖拽时,页面会加载最新的数据,并有一个短暂的提示控件出现,有些会有加载进度条,有些会记录加载日期.条目,有些还带有加载动画.其基本实现原理都相仿,本文中将探讨其实现原理,并封装出一个简单的下拉刷新控件 2.自定义刷新工具简单的示例 二.系统提供的下拉刷新工具 1.iOS6.0以后系统提供了自己的下拉刷新的控件:UIRefreshControl .例如,refreshControl,作为UITableViewController中的一个属

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

前言: 因为公司人员变动原因,导致了博主四个月没有动安卓,一直在做IOS开发,如今接近年前,终于可以花一定的时间放在安卓上了.好了,废话不多说,今天我们要带来的效果是苹果版本的QQ下拉刷新.首先看一下目标效果以及demo效果:      因为此效果实现的步骤较多,所以今天博主要实现以上效果的第一步——打造一个通用的下拉刷新控件,具体效果如下: GIF图片比较大,还希望读者能耐心等待一下下从效果图中可以看出,我们的下拉刷新的滑动还是很流畅的,可能大多数开发者用的是XListview或者PullTo

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

可能开发安卓的人大多数都用过很多下拉刷新的开源组件,但是今天用了官方v4支持包的SwipeRefreshLayout觉得效果也蛮不错的,特拿出来分享. 简介:SwipeRefreshLayout组件只接受一个子组件:即需要刷新的那个组件.它使用一个侦听机制来通知拥有该组件的监听器有刷新事件发生,换句话说我们的Activity必须实现通知的接口.该Activity负责处理事件刷新和刷新相应的视图.一旦监听者接收到该事件,就决定了刷新过程中应处理的地方.如果要展示一个“刷新动画”,它必须调用setR

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

需求:自定义一个ViewGroup,实现可以下拉刷新的功能.下拉一定距离后(下拉时显示的界面可以自定义任何复杂的界面)释放手指可以回调刷新的功能,用户处理完刷新的内容后,可以调用方法onCompleteRefresh()通知刷新完毕,然后回归正常状态.效果如下:     源代码:RefreshableView(https://github.com/wangjiegulu/RefreshableView) 分析: 我们的目的是不管什么控件,只要在xml中外面包一层标签,那这个标签下面的所有子标签所

Android 解决下拉刷新控件和ScrollVIew的滑动冲突问题。

最近项目要实现ScrollView中嵌套广告轮播图+RecyleView卡片布局,并且RecyleView按照header和内容的排列样式,因为RecyleView的可扩展性很强,所以我毫无疑问的选择了它,而且让RecyleView实现了可拖拽的效果, 最后我再加上了下拉刷新的效果(这里我用的下拉刷新控件是三方的SmartRefreshLayout).记得刚开始实现这个效果的时候还是十分的得心印手.可是当我测试的时候,发现RecyleView的子item的拖拽效果并不流畅,起初我以 为是由于Re