iOS中UIRefreshControl的基本使用详解

编程之家收集整理的这篇文章主要介绍了iOS中UIRefreshControl的基本使用详解编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

简介:

在展示一些经常需要更新的列表时,例如商品列表、聊天列表时,我们需要通过某种操作来刷新列表,最常用的便是下拉刷新的方法了,下拉刷新作为iOS的标准控件,即使不实用第三方库也可以容易的实现,这篇文章将向大家讲解如何使用UIRefreshControl实现下拉刷新功能

UIRefreshControl是iOS6自带的UITableView下拉刷新控件。iOS6中,UITableViewController已经内置了UIRefreshControl控件。UIRefreshControl目前只能用于UITableViewController,如果用在其他ViewController中,运行时会得到如下错误提示:(即UIRefreshControl只能被UITableViewController管理)

1. 首先看一下UIRefreshControl的头文件

NS_CLASS_AVAILABLE_IOS(6_0) @interface UIRefreshControl : UIControl
- (instancetype)init;
@property (nonatomic,readonly,getter=isRefreshing) BOOL refreshing;
// 菊花颜色
@property (nonatomic,retain) UIColor *tintColor;
// 下拉刷新文字描述
@property (nonatomic,retain) NSAttributedString *attributedTitle UI_APPEARANCE_SELECTOR;
// 开始刷新
- (void)beginRefreshing NS_AVAILABLE_IOS(6_0);
// 结束刷新
- (void)endRefreshing NS_AVAILABLE_IOS(6_0);
@end 

使用方法

1.目前只对UITableviewController有用;

2.目前只能下拉刷新,不能上拉加载;

3.init或者viewDidLoad中创建UIRefreshControl,设置文字,颜色等信息;

4.给UIRefreshControl添加方法,当值改变的时候调用方法用于数据请求;

5.该方法中请求数据确认完成之后,调用endRefreshing方法关闭刷新;

2.示例Demo

#import <UIKit/UIKit.h>
@interface RefreshTableViewController : UIViewController <UITableViewDelegate,UITableViewDataSource>
@property (nonatomic,retain) UITableView * tableView;
@property (nonatomic,retain) UIRefreshControl * refreshControl;
@property (nonatomic,retain) NSMutableArray * dataSource;
@end 
#import <UIKit/UIKit.h>
@interface RefreshTableViewController : UIViewController <UITableViewDelegate,retain) NSMutableArray * dataSource;
@end
#import "RefreshTableViewController.h"
@interface RefreshTableViewController ()
@end 

@implementation RefreshTableViewController
- (void)viewDidLoad {
 [super viewDidLoad]; 

 _dataSource = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",nil nil]; 

 // UITableView
 _tableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];
 _tableView.delegate = self;
 _tableView.dataSource = self;
 [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"UITableViewCell"];
 [self.view addSubview:_tableView]; 

 // UIRefreshControl
 _refreshControl = [[UIRefreshControl alloc] init];
 _refreshControl.tintColor = [UIColor redColor];
 _refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"下拉刷新"];
 [_refreshControl addTarget:self action:@selector(refreshControlAction) forControlEvents:UIControlEventValueChanged];
 [_tableView addSubview:_refreshControl];
} 

- (void) refreshControlAction {
 if (self.refreshControl.refreshing) {
  _refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"加载中..."]; 

  // 1. 远程请求数据
  [self requestAPIData]; 

  // 2. 结束刷新
  [self.refreshControl endRefreshing]; 

  // 3. 重新加载数据
  [self.tableView reloadData];
 }
} 

- (void)requestAPIData {
 // 模拟远程请求所耗费的时间
 [NSThread sleepForTimeInterval:2];
 for (int i = 0; i < 5; i++) {
  int value = (arc4random() % 100) + 1;
  [self.dataSource addObject:[NSString stringWithFormat:@"%d",value]];
 }
} 

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
 return self.dataSource.count;
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
 static NSString * ID = @"UITableViewCell";
 UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:ID];
 if (cell == nil) {
  cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
 } 

 cell.textLabel.text = self.dataSource[indexPath.row];
 return cell;
} 

- (void)didReceiveMemoryWarning {
 [super didReceiveMemoryWarning];
}
@end 

运行效果

iOS中UIRefreshControl的基本使用详解

关于UIRefreshControl在使用的一些踩坑指南,大家可以参考这篇文章://www.jb51.net/article/139064.htm

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持

总结

以上是编程之家为你收集整理的iOS中UIRefreshControl的基本使用详解全部内容,希望文章能够帮你解决iOS中UIRefreshControl的基本使用详解所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

相关文章

猜你在找的iOS相关文章

Symbol Value Meaning NULL (void *)0 literal null value for C pointers nil (id)0 literal null value for Objective-C objects nil:对象为空定义某一实例对象为空值。例如:NSObject* obj = nil;if (...
%s和%@%s是c标准的字符串而%@是objective-C的字符串NSString 补充%@ 对象 %d 十进制整数 %i 十进制整数 %u 十进制无符号整型 %o 八进制整数 %x 十六进制整数 %e 指数形式的浮点数 %f 浮点数 %s 字符串 %c 字符 %p 指针格式转换NSString *tempA = @&quot;123&quot;;NSStrin...
转载注明出处:https://blog.csdn.net/joosonmao/article/details/21172835刚接触iOS开发的人难免会对苹果的各种证书、配置文件等不甚了解,可能你按照网上的教程一步一步的成功申请了真机调试,但是还是对其中的缘由一知半解。这篇文章就对Certificate、Provisioning Profile等做个总结。 1.概念介绍如果你拥有一个开...
导入iOS证书p12到钥匙串,双击p12文件,登录,导入证书1.选择Generic iOS Device,选择其他模拟器是不能Archive的2.Xcode 工具条 Product 下点击 Archive3.如果弹出下面框,输入本机密码,始终允许4.点击Export5.点击Enterprise6.点击Next7.选择证书,点击Next8....
iOS9以下的自己越狱后,通过PP助手备份到电脑或者直接通过pp助手直接下载 
编译报错当你开心得升级完新 macOS,以及新 XCode,准备体验了一把 Dark Mode 编程模式,开心的打开自己的老项目的时候,发现编译不通过了╮(╯_╰)╭如果你的工程中如果依赖libstdc++,无论是你本身的功能用 C++ 跨平台编写,还是你引入了某个 SDK 其内部依赖这个libstdc++,都会导致整个工程编译不通过,报出Undefined symbols,C+...
终端中运行xcodebuild -showsdks
Dear Developer,We identified one or more issues with a recent delivery for your app, “xxxxxx”. Please correct the following issues, then upload again.Invalid architectures - This app has invalid ar...