除了使用第三方资源库来实现下拉刷新,我们也可以使用苹果的SDK中的UIRefreshControl来实现
其实UIRefreshControl的效果还是蛮不错的,所以特地学习了下,在此与大家分享。
UIRefreshControl使用非常简单,但是必须是在UITableViewController子类使用,而不能在UIViewController子类中使用。例如CustomViewController继承自UIViewController,那么就不能使用UIRefreshControl。
UIRefreshControl使用很简单,如下代码,RootTableViewController继承自UITableViewController,
//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];
self.refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@"下拉刷新"];
[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