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那种效果,这确定是腾讯公司本身自定制的。网上面应该有不少相似的下拉刷新效果开源库。网络

相关文章
相关标签/搜索