隨著下拉刷新模式的影響力越來越大,蘋果不得不考慮把它列入自己的規(guī)范之中,并在iOS 6 API中推出了下 拉刷新控件。圖1所示的是iOS 6中的下拉刷新,有點像是在拉“膠皮糖”,當這個“膠皮糖”拉斷時,就會出現(xiàn)活動指示器。圖2所示的是iOS 7之后中的下拉刷新,iOS 7之后提倡扁平化設(shè)計,這里的下拉動畫效果變成了活動指示器,而不是“膠皮糖”。
iOS 6的下拉刷新
iOS 7的下拉刷新
在iOS 6之后,UITableViewController添加了一個refreshControl屬性,這個屬性保持了UIRefreshControl的 一個對象指針。UIRefreshControl就是iOS 6為表視圖實現(xiàn)下拉刷新而提供的類,目前該類只能應(yīng)用于表視圖界面。 UIRefreshControl的refreshControl屬性與UITableViewController配合使用,關(guān)于下拉刷新布局等問題可以不必考慮,UITableViewController會將其自動放置于表視圖中。
下面南昌APP制作開發(fā)公司-百恒網(wǎng)絡(luò)就通過一個例子來讓大家了解一下UIRefreshControl控件的用法。先來看看視圖控制器ViewController的定義和屬性,以及視圖加載方法viewDidLoad的相關(guān)代碼:
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日期列表,用于在表視圖中顯示需要的數(shù)據(jù)。在viewDidLoad方法,我們初始化了當前時間的一條模擬數(shù)據(jù)。第①行代碼用于創(chuàng)建UIRefreshControl對象。第②行代碼用于設(shè)置 UIRefreshControl對象的attributedTitle屬性,它是用于顯示下拉控件的標題。第③行代碼通過編程方式為 UIRefreshControl控件添加UIControlEvents.ValueChanged(Objective-C中是UIControlEvent.ValueChanged)事件處理方法。refreshTableView是該事件的處理方法,相關(guān)代碼如下:
func refreshTableView() {
if (self.refreshControl?.refreshing == true) {
self.refreshControl?.attributedTitle = NSAttributedString(string:"加載中...") ①
//添加新的模擬數(shù)據(jù)
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:@"加載中..."]; ①
//添加新的模擬數(shù)據(jù)
NSDate *date = [[NSDate alloc] init];
[self.Logs addObject:date];
[self.refreshControl endRefreshing]; ②
self.refreshControl.attributedTitle
= [[NSAttributedString alloc]initWithString:@"下拉刷新"]; ③
[self.tableView reloadData]; ④
}
}
UIRefreshControl的refreshing屬性可以判斷控件是否處于刷新狀態(tài),刷新狀態(tài)的圖標是我們常見的活動指示器。第①行代碼用于將顯示標題設(shè)置為“加載中...”。
此外,南昌APP制作開發(fā)公司-百恒網(wǎng)絡(luò)想告訴大家的是,在刷新操作完成的時候,endRefreshing方法可以停止下拉刷新控件,回到初始狀態(tài),顯示的標題文本為“下拉刷新”,見第②行和第③行代碼。第③行代碼用于重新設(shè)置下拉刷新控件的標題,然后再通過第④行語句重新加載表視圖。
實現(xiàn)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開發(fā)中,應(yīng)用能夠?qū)崿F(xiàn)用戶需求的前提下,良好的用戶體檢是我們更高的追求,因為我們的產(chǎn)品不僅僅是具備某種功能的工具,更是一件藝術(shù)品,是我們心、智、力的結(jié)晶。
關(guān)于在IOS軟件開發(fā)中下拉刷新控件功能的實現(xiàn)方法就已經(jīng)講完了,如果大家還有哪些不太明白的地方可隨時來電和我們聯(lián)系。此外,了解更多關(guān)于APP開發(fā)的相關(guān)知識,歡迎訪問公司官網(wǎng)。