使用系统自带的 UIRefreshControl 实现下拉刷新

使用系统自带的 UIRefreshControl 实现下拉刷新

UIRefreshControl 为 UITableViewController 中的一个属性,从以下可以看出, IOS6.0 以上才支持.

@property (nonatomic,retain) UIRefreshControl *refreshControl NS_AVAILABLE_IOS(6_0);


RootViewController.h

//  Copyright (c) 2014年 YouXian. All rights reserved.

//



#import <UIKit/UIKit.h>



@interface RootViewController : UITableViewController



@end

RootViewController.m

//  Copyright (c) 2014年 YouXian. All rights reserved.

//



#import "RootViewController.h"



@interface RootViewController ()



@property (nonatomic) NSMutableArray *data;



@end



@implementation RootViewController





- (void)viewDidLoad

{

    [super viewDidLoad];

    

    //初始化数据源

    _data = [[NSMutableArray alloc] init];



    //初始化refreshControl

    self.refreshControl = [[UIRefreshControl alloc] init];

    self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"下拉刷新"];

    [self.refreshControl addTarget:self

                            action:@selector(RefreshViewControlEventValueChanged)

                  forControlEvents:UIControlEventValueChanged];

}



- (void)RefreshViewControlEventValueChanged

{

    [self performSelector:@selector(getDataAndStopRefresh)

               withObject:nil

               afterDelay:2];

}



- (void)getDataAndStopRefresh

{

    //处理数据

    for (int i = 0; i <= arc4random() % 4; i++)

    {

        [_data addObject:[NSString stringWithFormat:@"%@", [NSDate date].description]];

    }



    //结束刷新(重要,只有先处理完了数据源,再执行方法 endRefreshing 让tableView回去)

    [self.refreshControl endRefreshing];

    

    //重新加载

    [self.tableView reloadData];

}



#pragma mark - Table view data source



- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

    return 1;

}



- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

    return _data.count;

}



- (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:@"%@", _data[indexPath.row]];

    

    return cell;

}



@end

在下拉刷新后,只有执行了方法 [self.refreshControl endRefreshing]; 才能够恢复,简单易用,不过需要在执行这个方法之前处理好一切的数据.

你可能感兴趣的:(refresh)