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

SVPullToRefresh开源库地址

​https:///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​