在IOS6未发布以前,几乎都是使用那个UIRefresh在实现下拉刷新,甚至有人仍是先了上拉的功能,不得不说牛人不少啊。多是Apple意识到了这个功能的实用性,在IOS6中增长了下拉刷新,可是上啦尚未添加。新手自学了一下这个下拉刷新的功能,还不错,分享一下。ide
首先看一下最终的效果:atom

注:我使用的是IOS6 SDK + xCode4.5spa
1、新建一个工程,基于那么模板不要紧,这里使用的是Single-view来实现的。.net
2、修改ViewController.h文件,因为Apple给出的下拉属性是在UITableViewController中,因此咱们修改咱们工程中的类继承UITableViewController。代理
使用command+鼠标点击UITableViewController,来到UITableViewController的定义处,咱们能够看到以下部分:orm

在IOS6的版本中添加了UIRefreshControl,使用上面打开UITableViewController一样的方法,咱们来到UIRefreshControl的定义处,能够看到以下的定义:blog

在UIRefreshControl中有几个使用的属性,咱们即将使用到的是attributedTitle 属性。继承
查看完API以后,咱们开始在ViewController.h文件中修改代码:事件
- #import <UIKit/UIKit.h>
-
- @interface UIRefreshViewController : UITableViewController
-
-
- @property (nonatomic,assign) NSInteger items;
-
- @end
注意这里不须要进行代理和数据源的书写,由于UITableViewController中已经对这两个内容进行了集成。
3、完成后在ViewController.m文件中初始化显示的个数,以及添加为UI添加刷新控件的方法。ip
- - (void)viewDidLoad
- {
- [super viewDidLoad];
-
- self.items = 0;
- [self addRefreshViewController];
- }
4、完成后实现这里的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的下拉还带有”粘性“相似的效果,蛮有意思。
6、编写loadData方法,实现界面数据的刷新。同时refreshControl置为”下拉刷新“状态。
- -(void)loadData{
-
- [self.refreshControl endRefreshing];
- self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"下拉刷新"];
-
- self.items++;
- [self.tableView reloadData];
- }
7、完成这些以后,还不能出现界面,须要咱们实现TableView的那些delegate方法和dataSource方法:
- #pragma mark - Table view data source
-
- - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- {
- #warning Potentially incomplete method implementation.
-
- return 1;
- }
-
- - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- {
- #warning Incomplete method implementation.
-
- 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];
- }
-
-
- cell.textLabel.text = [NSString stringWithFormat:@"Evolution.cc & %d",indexPath.row];
-
- return cell;
- }
8、完成后编译,确认无错误后,cmd+R运行,你就能够看到神奇的下拉刷新了。