使用开源库 SVPullToRefresh 实现上拉加载下拉刷新

使用开源库 SVPullToRefresh 实现上拉加载下拉刷新

SVPullToRefresh开源库地址

https://github.com/samvermette/SVPullToRefresh

将整个文件夹SVPullToRefresh拖入工程中并引入头文件即可

注意编译时有一个方法快被弃用了

- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode

 

工程源码

RootViewController.h

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

2 //

3 

4 #import <UIKit/UIKit.h>

5 

6 @interface RootViewController : UIViewController

7 

8 @end

RootViewController.m

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

  2 //

  3 

  4 #import "RootViewController.h"

  5 #import "SVPullToRefresh.h"

  6 

  7 @interface RootViewController () <UITableViewDelegate, UITableViewDataSource>

  8 

  9 @property (nonatomic, strong) UITableView     *tableView;

 10 @property (nonatomic, strong) NSMutableArray  *dataSource;

 11 

 12 @end

 13 

 14 @implementation RootViewController

 15 

 16 - (void)viewDidLoad

 17 {

 18     [super viewDidLoad];

 19     

 20     //初始化 tableView

 21     _tableView = [[UITableView alloc] initWithFrame:self.view.bounds

 22                                               style:UITableViewStyleGrouped];

 23     _tableView.delegate   = self;

 24     _tableView.dataSource = self;

 25     [self.view addSubview:_tableView];

 26     

 27     //初始化数据源

 28     _dataSource = [[NSMutableArray alloc] init];

 29     for (int i = 0; i < 10; i++)

 30     {

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

 32     }

 33     

 34     //注册下拉刷新功能

 35     __weak RootViewController *weakSelf = self;

 36     [_tableView addPullToRefreshWithActionHandler:^{

 37         [weakSelf insertRowAtTop];

 38     }];

 39     

 40     //注册上拉刷新功能

 41     [_tableView addInfiniteScrollingWithActionHandler:^{

 42         [weakSelf insertRowAtBottom];

 43     }];

 44 }

 45 

 46 #pragma mark -

 47 #pragma mark PullToRefreshInsertRow

 48 

 49 - (void)insertRowAtTop

 50 {

 51     int64_t delayInSeconds = 2.0;

 52     dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);

 53     dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

 54         //开始更新

 55         [_tableView beginUpdates];

 56 

 57         //插入数据到数据源(数组的开头)

 58         [_dataSource insertObject:[NSString stringWithFormat:@"%@", [NSDate date].description]

 59                                                      atIndex:0];

 60         

 61         //在tableView中插入一行(Row开头)

 62         [_tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0

 63                                                                 inSection:0]]

 64                           withRowAnimation:UITableViewRowAnimationBottom];

 65         

 66         //结束更新

 67         [_tableView endUpdates];

 68         

 69         //停止菊花

 70         [_tableView.pullToRefreshView stopAnimating];

 71     });

 72 }

 73 

 74 - (void)insertRowAtBottom

 75 {

 76     int64_t delayInSeconds = 2.0;

 77     dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);

 78     dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

 79         //开始更新

 80         [_tableView beginUpdates];

 81 

 82         //插入数据到数据源(数组的结尾)

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

 84         

 85         

 86         //在tableView中插入一行(Row结尾)

 87         [_tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:_dataSource.count - 1

 88                                                                 inSection:0]]

 89                           withRowAnimation:UITableViewRowAnimationBottom];

 90         

 91         //结束更新

 92         [_tableView endUpdates];

 93         

 94         //停止菊花

 95         [_tableView.infiniteScrollingView stopAnimating];

 96     });

 97 }

 98 

 99 #pragma mark -

100 #pragma mark UITableViewDataSource

101 

102 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

103 {

104     return 1;

105 }

106 

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

108 {

109     return _dataSource.count;

110 }

111 

112 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

113     static NSString *identifier = @"Cell";

114     UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:identifier];

115     

116     if (cell == nil)

117     {

118         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault

119                                       reuseIdentifier:identifier];

120     }

121     

122     cell.textLabel.text = _dataSource[indexPath.row];

123     

124     return cell;

125 }

126 

127 @end

心得:

使用简单,逻辑清晰,开源库使用block实现, RootViewController.m 35行代码处要将RootViewController自身传入block中,需要使用弱应用指针,注意.

工程源码地址:

http://pan.baidu.com/s/1dD24E1V

 

你可能感兴趣的:(refresh)