1.导入到自己的工程中,如果是非ACR,则需要-fno-objc-arc,如果是arc就不用管了。
一般的刷新都是基于UIScrollView的,因为能拖拽的view一般都是继承于UIScrollView。
2.#import “MJRefresh.h” 这个可以直接加载.m中
然后.h文件中:
1 #import <UIKit/UIKit.h>
2
3 @interface MyViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>
4 {
5 CGRect _rect;//保存当前物理屏幕大小
6 }
7 @property (nonatomic,retain)UITableView *tableView;//当前的tableview
8 @property (nonatomic,retain)NSMutableArray *tableViewData;//tableview中数组数组
9 @end
.m文件中:
1 #import "MyViewController.h"
2
3 #import "MJRefresh.h"
4
5 @interface MyViewController ()
6
7 @end
8
9 @implementation MyViewController
10 -(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
11 {
12 self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
13 if(self){
14 _rect = [[UIScreen mainScreen]bounds];
15 _tableViewData = [[NSMutableArray alloc]init];
16 _tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, _rect.size.width, _rect.size.height)];
17 }
18 return self;
19 }
20 - (void)viewDidLoad {
21 [super viewDidLoad];
22 for (int i = 0 ; i < 5; i++) {
23 [_tableViewData addObject:[NSString stringWithFormat:@"这是第%d条",i + 1]];
24 }
25 _tableView.delegate = self;
26 _tableView.dataSource = self;
27 [self.view addSubview:_tableView];
28 //开启刷新状态
29 [self setupRefresh];
30 }
31 //
32 开始刷新自定义方法
33 - (void)setupRefresh
34 {
35 //下拉刷新
36 [self.tableView addHeaderWithTarget:self action:@selector(headerRereshing) dateKey:@"table"];
37 [self.tableView headerBeginRefreshing];
38
39 // 2.上拉加载更多(进入刷新状态就会调用self的footerRereshing)
40 [self.tableView addFooterWithTarget:self action:@selector(footerRereshing)];
41 //一些设置
42 // 设置文字(也可以不设置,默认的文字在MJRefreshConst中修改)
43 self.tableView.headerPullToRefreshText = @"下拉可以刷新了";
44 self.tableView.headerReleaseToRefreshText = @"松开马上刷新了";
45 self.tableView.headerRefreshingText = @"刷新中。。。";
46
47 self.tableView.footerPullToRefreshText = @"上拉可以加载更多数据了";
48 self.tableView.footerReleaseToRefreshText = @"松开马上加载更多数据了";
49 self.tableView.footerRefreshingText = @"加载中。。。";
50 }
51 //下拉刷新
52 - (void)headerRereshing
53 {
54 //一般这些个里边是网络请求,然后会有延迟,不会像现在刷新这么快
55 // 1.添加假数据
56 [self.tableViewData insertObject:@"这是刷新的数据" atIndex:0];
57 [self.tableView reloadData];
58 //2.结束刷新
59 [self.tableView headerEndRefreshing];
60 }
61 //上拉加载
62 - (void)footerRereshing
63 {
64 //这个一般是提取缓存的数据
65 // 1.添加假数据
66 [self.tableViewData insertObject:@"这是加载以前的数据" atIndex:[_tableViewData count]];
67 [self.tableView reloadData];
68 //2,结束刷新
69 [self.tableView footerEndRefreshing];
70 }
71 //
72
73 #pragma mark - tableView delegate
74
75 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
76 {
77 return 1;
78 }
79 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
80 {
81 return [_tableViewData count];
82 }
83 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
84 {
85 static NSString *cellID = @"cellID";
86 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
87 if(cell == nil){
88 cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellID];
89 }
90 cell.textLabel.text = _tableViewData[indexPath.row];
91 return cell;
92 }
93 //释放
94 - (void)dealloc
95 {
96 [_tableView release];
97 [_tableViewData release];
98 [super dealloc];
99 }
100
101 如果在xcode6.0中有错误:
102 选中项目 - Project - Build Settings-Apple LLVM 6.0-Preprocessing中的Enable Strict Checking of objc_msgsend calls 设置为 NO 即可
PS:
1 //时间队列,规定时间执行某个事件
2 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
3 // 刷新表格
4 [self.tableView reloadData];
5
6 // (最好在刷新表格后调用)调用endRefreshing可以结束刷新状态
7 [self.tableView headerEndRefreshing];
8 });