十年专注于品牌网站建设 十年专注于品牌网站建设,低调、高逼格、有情怀的网络应用服务商!
南昌百恒网络微信公众号 扫一扫关注
小程序
tel-icon全国服务热线:400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络微信小程序

百恒网络

南昌百恒网络

IOS软件开发之下拉刷新控件功能的实现方法

百恒网络 2017-08-14 201

随着下拉刷新模式的影响力越来越大,苹果不得不考虑把它列入自己的规范之中,并在iOS 6 API中推出了下 拉刷新控件。图1所示的是iOS 6中的下拉刷新,有点像是在拉“胶皮糖”,当这个“胶皮糖”拉断时,就会出现活动指示器。图2所示的是iOS 7之后中的下拉刷新,iOS 7之后提倡扁平化设计,这里的下拉动画效果变成了活动指示器,而不是“胶皮糖”。

iOS 6的下拉刷新

iOS 6的下拉刷新

iOS 7的下拉刷新

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开发的相关知识,欢迎访问公司官网。


400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络小程序

欢迎您的光顾,我们将竭诚为您服务×

售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售后服务 售后服务
 
售后服务 售后服务
 
备案专线 备案专线
 
×