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
使用开源库 SVPullToRefresh 实现上拉加载下拉刷新,布布扣,bubuko.com
使用开源库 SVPullToRefresh 实现上拉加载下拉刷新
原文:http://www.cnblogs.com/YouXianMing/p/3584342.html