在IOS6未釋出之前,幾乎都是使用那個UIRefresh在實作下拉重新整理,甚至有人還是先了上拉的功能,不得不說牛人很多啊。可能是Apple意識到了這個功能的實用性,在IOS6中增加了下拉重新整理,但是上啦還沒有添加。新手自學了一下這個下拉重新整理的功能,還不錯,分享一下。
首先看一下最終的效果:
注:我使用的是IOS6 SDK + xCode4.5
一、建立一個工程,基于那麼模闆沒關系,這裡使用的是Single-view來實作的。
二、修改ViewController.h檔案,由于Apple給出的下拉屬性是在UITableViewController中,是以我們修改我們工程中的類繼承UITableViewController。
使用command+滑鼠點選UITableViewController,來到UITableViewController的定義處,我們可以看到如下部分:
在IOS6的版本中添加了UIRefreshControl,使用上面打開UITableViewController同樣的方法,我們來到UIRefreshControl的定義處,可以看到如下的定義:
在UIRefreshControl中有幾個使用的屬性,我們即将使用到的是attributedTitle 屬性。
檢視完API之後,我們開始在ViewController.h檔案中修改代碼:
#import <UIKit/UIKit.h>
//修改父類為UITableViewController
@interface UIRefreshViewController : UITableViewController
//定義顯示的個數
@property (nonatomic,assign) NSInteger items;
@end
注意這裡不需要進行代理和資料源的書寫,因為UITableViewController中已經對這兩個内容進行了內建。
三、完成後在ViewController.m檔案中初始化顯示的個數,以及添加為UI添加重新整理控件的方法。
- (void)viewDidLoad
{
[super viewDidLoad];
self.items = 0;
[self addRefreshViewController];
}
四、完成後實作這裡的addRefreshViewController方法:
-(void)addRefreshViewController{
self.refreshControl = [[UIRefreshControl alloc] init];
self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"下拉重新整理"];
[self.refreshControl addTarget:self action:@selector(RefreshViewControlEventValueChanged) forControlEvents:UIControlEventValueChanged];
}
這裡我們使用了attributedTitle屬性,這個屬性就是設定下拉重新整理的文字顯示的。另外,UIRefreshControl響應的是ValueChange事件。
五,當使用者下拉table的時候,refreshControl就會響應RefreshViewControlEventValueChanged方法,在這個方法中實作下拉松開時所要顯示的文字資訊:
-(void)RefreshViewControlEventValueChanged{
self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"重新整理中..."];
[self performSelector:@selector(loadData) withObject:nil afterDelay:2.0f];
}
這樣在下拉的時候,refreshControl上的文字就會變成“重新整理中。。。”,為了看到重新整理的效果,設定了2秒的延後執行loadData,對使用者來說是一個友好性,另外Apple的下拉還帶有”粘性“類似的效果,蠻有意思。
六、編寫loadData方法,實作界面資料的重新整理。同時refreshControl置為”下拉重新整理“狀态。
-(void)loadData{
[self.refreshControl endRefreshing];
self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"下拉重新整理"];
self.items++;
[self.tableView reloadData];
}
七、完成這些之後,還不能出現界面,需要我們實作TableView的那些delegate方法和dataSource方法:
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
#warning Potentially incomplete method implementation.
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
#warning Incomplete method implementation.
// Return the number of rows in the section.
return self.items;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell...
cell.textLabel.text = [NSString stringWithFormat:@"Evolution.cc & %d",indexPath.row];
return cell;
}
八、完成後編譯,确認無錯誤後,cmd+R運作,你就可以看到神奇的下拉重新整理了。
九、Demo就不上傳了,所有的東西都已經在上面了。