天天看點

IOS6新特性之下拉重新整理<UIRefreshControl>

在IOS6未釋出之前,幾乎都是使用那個UIRefresh在實作下拉重新整理,甚至有人還是先了上拉的功能,不得不說牛人很多啊。可能是Apple意識到了這個功能的實用性,在IOS6中增加了下拉重新整理,但是上啦還沒有添加。新手自學了一下這個下拉重新整理的功能,還不錯,分享一下。

首先看一下最終的效果:

IOS6新特性之下拉重新整理<UIRefreshControl>
IOS6新特性之下拉重新整理<UIRefreshControl>

注:我使用的是IOS6 SDK  + xCode4.5

一、建立一個工程,基于那麼模闆沒關系,這裡使用的是Single-view來實作的。

二、修改ViewController.h檔案,由于Apple給出的下拉屬性是在UITableViewController中,是以我們修改我們工程中的類繼承UITableViewController。

使用command+滑鼠點選UITableViewController,來到UITableViewController的定義處,我們可以看到如下部分:

IOS6新特性之下拉重新整理<UIRefreshControl>

在IOS6的版本中添加了UIRefreshControl,使用上面打開UITableViewController同樣的方法,我們來到UIRefreshControl的定義處,可以看到如下的定義:

IOS6新特性之下拉重新整理<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就不上傳了,所有的東西都已經在上面了。