随着下拉刷新模式的影响力越来越大,苹果不得不考虑把它列入自己的规范之中,并在iOS 6 API中推出了下 拉刷新控件。图1所示的是iOS 6中的下拉刷新,有点像是在拉“胶皮糖”,当这个“胶皮糖”拉断时,就会出现活动指示器。图2所示的是iOS 7之后中的下拉刷新,iOS 7之后提倡扁平化设计,这里的下拉动画效果变成了活动指示器,而不是“胶皮糖”。
iOS 6的下拉刷新
iOS 7的下拉刷新
在iOS 6之后,UITableViewController添加了一个refreshControl属性,这个属性保持了UIRefreshControl的 一个对象指针。UIRefreshControl就是iOS 6为表视图实现下拉刷新而提供的类,目前该类只能应用于表视图界面。 UIRefreshControl的refreshControl属性与UITableViewController配合使用,关于下拉刷新布局等问题可以不必考虑,UITableViewController会将其自动放置于表视图中。
下面南昌APP制作开发公司-百恒网络就通过一个例子来让大家了解一下UIRefreshControl控件的用法。先来看看视图控制器ViewController的定义和属性,以及视图加载方法viewDidLoad的相关代码:
class ViewController: UITableViewController {
var Logs : NSMutableArray!
override func viewDidLoad() {
super.viewDidLoad()
//初始化变量和时间
self.Logs = NSMutableArray()
var date = NSDate()
self.Logs.addObject(date)
//初始化UIRefreshControl
var rc = UIRefreshControl() ①
rc.attributedTitle = NSAttributedString(string: "下拉刷新") ②
rc.addTarget(self, action: "refreshTableView",
forControlEvents: UIControlEvents.ValueChanged) ③
self.refreshControl = rc
}
}
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic,strong) NSMutableArray* Logs;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
//初始化变量和时间
self.Logs = [[NSMutableArray alloc] init];
NSDate *date = [[NSDate alloc] init];
[self.Logs addObject:date];
//初始化UIRefreshControl
UIRefreshControl *rc = [[UIRefreshControl alloc] init]; ①
rc.attributedTitle = [[NSAttributedString alloc]initWithString:
@"下拉刷新"]; ②
[rc addTarget:self action:@selector(refreshTableView)
forControlEvents:UIControlEventValueChanged]; ③
self.refreshControl = rc;
}
上述代码中,Logs属性存放了NSDate日期列表,用于在表视图中显示需要的数据。在viewDidLoad方法,我们初始化了当前时间的一条模拟数据。第①行代码用于创建UIRefreshControl对象。第②行代码用于设置 UIRefreshControl对象的attributedTitle属性,它是用于显示下拉控件的标题。第③行代码通过编程方式为 UIRefreshControl控件添加UIControlEvents.ValueChanged(Objective-C中是UIControlEvent.ValueChanged)事件处理方法。refreshTableView是该事件的处理方法,相关代码如下:
func refreshTableView() {
if (self.refreshControl?.refreshing == true) {
self.refreshControl?.attributedTitle = NSAttributedString(string:"加载中...") ①
//添加新的模拟数据
var date = NSDate()
self.Logs.addObject(date)
self.refreshControl?.endRefreshing() ②
self.refreshControl?.attributedTitle = NSAttributedString(string:"下拉刷新") ③
self.tableView.reloadData() ④
}
}
-(void) refreshTableView
{
if (self.refreshControl.refreshing) {
self.refreshControl.attributedTitle
= [[NSAttributedString alloc]initWithString:@"加载中..."]; ①
//添加新的模拟数据
NSDate *date = [[NSDate alloc] init];
[self.Logs addObject:date];
[self.refreshControl endRefreshing]; ②
self.refreshControl.attributedTitle
= [[NSAttributedString alloc]initWithString:@"下拉刷新"]; ③
[self.tableView reloadData]; ④
}
}
UIRefreshControl的refreshing属性可以判断控件是否处于刷新状态,刷新状态的图标是我们常见的活动指示器。第①行代码用于将显示标题设置为“加载中...”。
此外,南昌APP制作开发公司-百恒网络想告诉大家的是,在刷新操作完成的时候,endRefreshing方法可以停止下拉刷新控件,回到初始状态,显示的标题文本为“下拉刷新”,见第②行和第③行代码。第③行代码用于重新设置下拉刷新控件的标题,然后再通过第④行语句重新加载表视图。
实现UITableViewDataSource的方法的代码如下:
override func tableView(tableView: UITableView,
numberOfRowsInSection section: Int) -> Int {
return self.Logs.count
}
override func tableView(tableView: UITableView,
cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cellIdentifier = "CellIdentifier"
var cell:UITableViewCell! = tableView
.dequeueReusableCellWithIdentifier(cellIdentifier)
as? UITableViewCell
if (cell == nil) {
cell = UITableViewCell(style: UITableViewCellStyle.Default,
reuseIdentifier:cellIdentifier)
}
var dateFormatter : NSDateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss zzz"
var theDate = self.Logs[indexPath.row] as NSDate
cell.textLabel?.text = dateFormatter.stringFromDate(theDate)
cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
return cell
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:
(NSInteger)section {
return [self.Logs count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1
reuseIdentifier:CellIdentifier];
}
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat: @"yyyy-MM-dd HH:mm:ss zzz"];
cell.textLabel.text = [dateFormat stringFromDate: [self.Logs
objectAtIndex:[indexPath row]]];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
}
最后运行一下,看看效果即可。
在南昌APP开发中,应用能够实现用户需求的前提下,良好的用户体检是我们更高的追求,因为我们的产品不仅仅是具备某种功能的工具,更是一件艺术品,是我们心、智、力的结晶。
关于在IOS软件开发中下拉刷新控件功能的实现方法就已经讲完了,如果大家还有哪些不太明白的地方可随时来电和我们联系。此外,了解更多关于APP开发的相关知识,欢迎访问公司官网。