前言

	NS_CLASS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED @interface UIRefreshControl : UIControl

1、UIRefreshControl

  • UITableViewController 自带刷新控件。

  • 使用 StoryBoard 创建的表格视图控制器可在 SB 的 TableViewController 中将 Refreshing 项设置为 Enableed,在控件为列表中将自动添加一个名为 Refresh Control 的控件,将该控件连接到代码中的自定义加载数据方法,即可实现刷新数据的操作。

  • 纯代码创建的 TableViewController 可以直接使用 self.refreshControl = [[UIRefreshControl alloc] init]; 实例化刷新控件。然后向 self.refreshControl 中添加自定义加载数据方法,即可实现刷新数据的操作。

1.1 StoryBoard 方式创建

  • 实例化刷新控件

    	Refreshing : Enabled 开启刷新控件
    Disabled 关闭刷新控件 IBAction : - (IBAction)downloadData ,将 Refresh Control 控件连接到代码中的自定义方法。
  • 设置刷新控件属性

    	Title      : 设置刷新控件下边的提示文字及文字的颜色,也可使用代码设置
    
    	Background : 设置刷新控件背景视图的颜色,设置了颜色之后,下拉的时候控件会随下拉向下滑动
    Tint : 设置控件的颜色,也可使用代码设置 // 设置刷新控件的颜色
    self.refreshControl.tintColor = [UIColor redColor]; // 设置刷新控件下边的提示文字及文字的颜色
    self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"松开手开始刷新"];
  • 开始/停止刷新

    	// 判断是否正在刷新,readonly
    BOOL isRefreshing = self.refreshControl.isRefreshing; // 开始刷新,在 TableViewController 中,下拉表格自动刷新,使用方法开始刷新时表格自动下拉
    [self.refreshControl beginRefreshing]; // 停止刷新,刷新完成后必须调用停止刷新方法
    [self.refreshControl endRefreshing];

1.2 纯代码方式创建

  • 实例化刷新控件

    	// refreshControl 为 TableViewController 的属性,无需声明
    self.refreshControl = [[UIRefreshControl alloc] init]; // 添加刷新方法
    [self.refreshControl addTarget:self action:@selector(downloadData) forControlEvents:UIControlEventValueChanged];
  • 开始/停止刷新

    	// 判断是否正在刷新,readonly
    BOOL isRefreshing = self.refreshControl.isRefreshing; // 开始刷新,在 TableViewController 中,下拉表格自动刷新,使用方法开始刷新时表格自动下拉
    [self.refreshControl beginRefreshing]; // 停止刷新,刷新完成后必须调用停止刷新方法
    [self.refreshControl endRefreshing];
  • 设置刷新控件属性

    	// 设置刷新控件的颜色
    self.refreshControl.tintColor = [UIColor redColor]; // 设置刷新控件下边的提示文字及文字的颜色
    self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"松开手开始刷新"];

2、refreshControl 的使用

  • Objective-C

    • VideoModel.h

      	// copy 属性,在设置数值的时候,如果有一方是可变的,会默认做一次 copy 操作,会建立新的副本
      @property (nonatomic, copy) NSString *name;
      @property (nonatomic, copy) NSString *teacher; // 为了避免服务端返回的数值型数据是 null,可以把数值型的数据设置成 NSNumber
      @property (nonatomic, copy) NSNumber *length;
    • VideoCell.h

      	@class VideoModel;
      @property (nonatomic, strong) VideoModel *videoModel;
    • VideoCell.m

      	@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
      @property (weak, nonatomic) IBOutlet UILabel *teacherLabel;
      @property (weak, nonatomic) IBOutlet UILabel *timeLabel; - (void)setVideoModel:(VideoModel *)videoModel { _videoModel = videoModel; self.nameLabel.text = videoModel.name;
      self.teacherLabel.text = videoModel.teacher;
      self.timeLabel.text = [NSString stringWithFormat:@"%@", videoModel.length];
      }
    • ViewController.h

      	@interface ViewController : UITableViewController
    • ViewController.m

      	// 表格数据源数组
      @property (nonatomic, strong) NSArray *dataSourceArray; // 网络数据解析数据源
      @property (nonatomic, strong) NSMutableArray *videosSourceArray; // 数据模型
      @property (nonatomic, strong) VideoModel *videoModel; // 数据模型的值
      @property (nonatomic, strong) NSMutableString *videoModelElementValueString; // 设置数据源数据 - (void)setDataSourceArray:(NSArray *)dataSourceArray {
      _dataSourceArray = dataSourceArray; // 刷新表格
      [self.tableView reloadData]; // 停止刷新,刷新完成后必须调用停止刷新方法
      [self.refreshControl endRefreshing];
      } // 懒加载 - (NSMutableArray *)videosSourceArray {
      if (_videosSourceArray == nil) {
      _videosSourceArray = [[NSMutableArray alloc] init];
      }
      return _videosSourceArray;
      } - (NSMutableString *)videoModelElementValueString {
      if (_videoModelElementValueString == nil) {
      _videoModelElementValueString = [[NSMutableString alloc] init];
      }
      return _videoModelElementValueString;
      } // 表格数据源方法 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
      return self.dataSourceArray.count;
      } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { VideoCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; cell.videoModel = self.dataSourceArray[indexPath.row]; return cell;
      } // 下载解析数据 // 连接到表格刷新控件
      - (IBAction)downloadData { NSURL *url = [NSURL URLWithString:@"http://192.168.88.200/videos/videos.xml"];
      NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:15.0];
      NSURLSession *session = [NSURLSession sharedSession]; // 异步执行
      NSURLSessionDataTask *task = [session dataTaskWithRequest:request
      completionHandler:^(NSData * _Nullable data,
      NSURLResponse * _Nullable response,
      NSError * _Nullable error) { if (error == nil && data != nil) {
      NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
      parser.delegate = self;
      [parser parse];
      }
      }]; [task resume];
      } - (void)parserDidStartDocument:(NSXMLParser *)parser {
      [self.videosSourceArray removeAllObjects];
      } - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
      namespaceURI:(NSString *)namespaceURI
      qualifiedName:(NSString *)qName
      attributes:(NSDictionary *)attributeDict { if ([elementName isEqualToString:@"video"]) {
      self.videoModel = [[VideoModel alloc] init];
      self.videoModel.videoId = @([attributeDict[@"videoId"] intValue]);
      }
      [self.videoModelElementValueString setString:@""];
      } - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
      [self.videoModelElementValueString appendString:string];
      } - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
      namespaceURI:(NSString *)namespaceURI
      qualifiedName:(NSString *)qName { if ([elementName isEqualToString:@"video"]) {
      [self.videosSourceArray addObject:self.videoModel];
      } else if (![elementName isEqualToString:@"videos"]) {
      [self.videoModel setValue:self.videoModelElementValueString forKey:elementName];
      }
      } - (void)parserDidEndDocument:(NSXMLParser *)parser { // 主线程更新 UI
      dispatch_async(dispatch_get_main_queue(), ^{ self.dataSourceArray = self.videosSourceArray;
      });
      }

iOS - UIRefreshControl 刷新数据的更多相关文章

  1. 【iOS】Plist-XML-JSON数据解析

    网络上数据传输通用的有XML.JSON等,iOS中也能够用Plist. 要进行传输数据.就要首先进行序列化: 1.序列化.  对象转换成二进制流.(这个一句话即可) .反序列化. 二进制流转换为对象等 ...

  2. iOS开发系列--数据存取

    概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...

  3. SQL实现类似于自动刷新数据的功能

    有时需要在SQL中,定时刷新某张表,比如说是要定时查询某张表的行数,通常做法就是手动的按F5去执行来刷新数据.但是如果这个定时查询历时较长,10分钟,或半小时,手动的话肯定是要崩溃了.貌似SQL没有像 ...

  4. iOS中的数据持久化方式

    iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data. 1.属性列表 涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults ...

  5. ios的网络数据下载和json解析

    ios的网络数据下载和json解析 简介 在本文中,笔者将要给大家介绍如何使用nsurlconnection 从网上下载数据,以及解析json数据格式,以及如何显示数据和图片的异步下载显示. 涉及的知 ...

  6. jsTree 的简单用法--异步加载和刷新数据

    首先这两个文件是必须要引用的,还有就是引用 jQuery 文件就不说了: <link href="/css/plugins/jsTree/style.min.css" rel ...

  7. 解决JQuery中datatables设置隐藏显示列多次提交后台刷新数据的问题

    此次项目开发过程中用到了Jquery的Datatables插件,无疑他是数据列表展示,解决MVC中同步过程中先走控制器后返回视图,查询数据过程中无法提示等待的弊端, 而且他所提供的各种方法也都有较强的 ...

  8. POI刷新数据后的函数(公式)更新问题

    使用POI将Excel模板中的数据进行更新,这应该是很常见的操作 下面就贴上我的一小段代码 public class ModifyExcel { /** * @param fileName Excel ...

  9. 【转】iOS开发系列--数据存取

    原文: http://www.cnblogs.com/kenshincui/p/4077833.html#SQLite 概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储 ...

随机推荐

  1. [转]Jexus的常用操作和基本配置

    转自http://www.cnblogs.com/xiaodiejinghong/archive/2013/04/05/3000404.html 3.Jexus的操作 经过两个章节关于Jexus的介绍 ...

  2. 将helps.php或者functions.php直接进行了加载

    TP3系列中functions.php文件默认其实是空文件,很好找.我们可以直接封装代码. Laravel5系列中的path/vendor/laravel/framework/src/Illumina ...

  3. 对Discuz的简单认识

    Discuz是php的一个开源论坛系统,是由康盛创想公司2004开发,从Discuz! 1.0到 现在的Discuz X3,无论从功能上还是从用户体验上,都达到了一个质的飞越.主要包括论坛.门户.群组 ...

  4. Asp.net mvc5 解析route源码实现自己的route系统

    url route 路由系统的责任是找到匹配的路由,创建路由数据,并将请求分配给一个处理程序. 选择动作是 MVC 的处理程序的实现细节.它使用路由数据和从传入请求其他信息来选择要执行的操作 实例 源 ...

  5. poj1703 Find them, Catch them

    并查集. 这题错了不少次才过的. 分析见代码. http://poj.org/problem?id=1703 #include <cstdio> #include <cstring& ...

  6. github for windows回滚到某一个版本,

    建议先学会使用git命令再学GUI版的git,git本来就是命令行程序,GUI本质就是执行一些命令.仅从一些icon和单词去理解一些操作难免会有偏差.而反过来,熟悉命令会更好地理解GUI操作.想要回滚 ...

  7. ArrayList实现原理

    转载:http://wiki.jikexueyuan.com/project/java-collection/arraylist.html ArrayList 概述 ArrayList 可以理解为动态 ...

  8. Javascript中setTimeout()的用法详解

    1.SetTimeOut()       1.1 SetTimeOut()语法例子       1.2 用SetTimeOut()执行Function       1.3 SetTimeout()语法 ...

  9. FileInputstream的available()方法

    摘自:http://greemranqq.iteye.com/blog/2051487

  10. 深入javascript作用域链到闭包

    我之前用过闭包,用过this,虽然很多时候知道是这么一回事,但是确实理解上还不够深入.再一次看javascript高级程序设计这本书时,发现一起很多疑难问题竟然都懂了,所以总结一下一些理解,难免有错, ...