iOS開發技巧(系列十三:UIRefreshControl下拉刷新)

其實UIRefreshControl的效果仍是蠻不錯的,因此特意學習了下,在此與你們分享。python

UIRefreshControl使用很是簡單,可是必須是在UITableViewController子類使用,而不能在UIViewController子類中使用。例如CustomViewController繼承自UIViewController,那麼就不能使用UIRefreshControl。ios

UIRefreshControl使用很簡單,以下代碼,RootTableViewController繼承自UITableViewController,git

//RootTaleViewController.h file
@interface RootTableViewController:UITableViewController
{
}
@end
//RootTableViewController.m file
@interface RootTableViewController()

@end
@implementation RootTableViewController
//省略不相干代碼

- (void)viewDidLoad
{
    [super viewDidLoad];
    //初始化UIRefreshControl
    UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
    [refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];
    [self setRefreshControl:refreshControl];
}
/*
解釋一下下面的代碼:
當用戶向下下拉刷新的時候,refresh觸發,這時候請求url連接中的內容。這裏使用AFNetworking來解析,代碼塊中的內容就是解析成功以後,設置數據源self.tweets中的內容,而後刷新UITableView界面,而後向UIRefreshControl對象發送endRefreshing消息,中止UIRefreshControl的動畫效果。若是失敗的話,也要中止UIRefreshControl的動畫效果。
*/
- (void)refresh:(id)sender
{
    NSURL *url = [NSURL URLWithString:@"http://search.twitter.com/search.json?q=ios%20development&rpp=100&include_entities=true&result_type=mixed/"];
    // Initialize URL Request
    NSURLRequest *urlRequest = [[NSURLRequest alloc] initWithURL:url];
    // JSON Request Operation
    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:urlRequest success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        NSArray *results = [(NSDictionary *)JSON objectForKey:@"results"];
        if ([results count]) {
            self.tweets = results;
            // Reload Table View
            [self.tableView reloadData];
            // End Refreshing
            [(UIRefreshControl *)sender endRefreshing];
        }
    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
        // End Refreshing
        [(UIRefreshControl *)sender endRefreshing];
    }];
    // Start Operation
    [operation start];
}
@end

代碼我放在了Github上面的-refresh網絡請求的內容我沒有放在代碼中,由於使用了tweet的數據,因此請求數據無效。這段代碼只是向你們傳遞一些開發過程當中的思想。github

另外在iOS6和iOS7上面,效果是不一樣的,在iOS6效果以下圖,
json

在iOS7運行效果以下圖所示,微信

我在使用微信的時候,發如今iOS7系統上面,它的效果是iOS6那種效果,這確定是騰訊公司本身自定製的。網上面應該有不少相似的下拉刷新效果開源庫。網絡

相關文章
相關標籤/搜索