IOS6SDK 中增加了一个类
UIRefreshControl ,效果是下拉水滴 的,很拉轰,可惜的是,当前IOS6 市场占有率为66% ,也不能因为这个控件好用就不在乎那些不升级的用户的感受,所以,只能采用其他的方式去解决。
这个链接https://github.com/instructure/CKRefreshControl 的作者是 bjhomer
#import "PullTableViewController.h"
#import "CKRefreshControl.h"
@interface PullTableViewController ()
@end
@implementation PullTableViewController
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
if([[UIDevice currentDevice].systemVersion floatValue] < 6.0){
CKRefreshControl *refreshControl = [CKRefreshControl new];
self.refreshControl=(id)refreshControl;
}else{
self.refreshControl=[[[UIRefreshControl alloc]init]autorelease];
}
self.refreshControl.tintColor = [UIColor orangeColor];
NSLog(@"version is %f",[[UIDevice currentDevice].systemVersion floatValue]);
self.refreshControl.attributedTitle=[[[NSAttributedString alloc]initWithString:@"下拉刷新"]autorelease];
[self.refreshControl addTarget:self action:@selector(doRefresh:)forControlEvents:UIControlEventValueChanged];
}
-(void)doRefresh:(id)sender{
// if (self.refreshControl.refreshing) {
NSLog(@"refreshing");
self.refreshControl.attributedTitle = [[[NSAttributedString alloc]initWithString:@"刷新中"]autorelease];
[self performSelector:@selector(endRefreshing) withObject:nil afterDelay:2];
// }
}
- (void) endRefreshing
{
NSLog(@"refreshed");
[self.refreshControl endRefreshing];
self.refreshControl.attributedTitle = [[[NSAttributedString alloc]initWithString:@"下拉刷新"]autorelease];
[self.tableView reloadData];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 20;
}
- (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] autorelease];
}
// Configure the cell...
cell.textLabel.text=[NSString stringWithFormat:@"cell %d",indexPath.row];
return cell;
}
@end
上面是我创建的一个tableview 里面增加了 SDK版本的判断,如果不是IOS6,那么这个也不会出错。
注: CKRefreshControl 是ARC的,所以编译的时候要注意。
github上 给的实例 实际上包含一个静态库,如果不喜欢的话,可以直接把CKRefreshArrowView.h,CKRefreshArrowView.m 以及CKRefreshControl.h,CKRefreshControl.m copy 到项目中,并且导入 QuartzCore 即可