EGOTableViewPullRefresh(一)实现下拉刷新

         我们用到一个EGOTableViewPullRefresh的开源项目来实现这个功能,先到这里下载源码,下载完成后里面有个Demo是可以直接运行的Xcode工程,然后就是这个开源项目的源码,学习如何使用可以参照Demo。

在使用下拉刷新类库EGORefreshTableHeaderView的时候,将资源文件添加到工程中,也不要忘记添加QuartzCore.framework框架。

1.打开MainViewController.xib文件然后拖入一个UITableViewController并连接DataSource和Delegate,然后在MainViewController.h文件中声明UITableView的协议。

 1 #import   
 2 #import "EGORefreshTableHeaderView.h"  
 3   
 4 @interface MainViewController : UITableViewController  
 5 {  
 6     EGORefreshTableHeaderView *_refreshTableView;  
 7     BOOL _reloading;  
 8 }  
 9   
10 @property (strong,nonatomic) NSArray *array;  
11   
12 //开始重新加载时调用的方法  
13 - (void)reloadTableViewDataSource;  
14 //完成加载时调用的方法  
15 - (void)doneLoadingTableViewData;  
16   
17 @end  
  1 #import "MainViewController.h"  
  2   
  3 @interface MainViewController ()  
  4   
  5 @end  
  6   
  7 @implementation MainViewController  
  8 @synthesize array = _array;  
  9   
 10 #pragma mark -  
 11 #pragma mark View life cycle  
 12 -(void)viewDidLoad  
 13 {  
 14     [super viewDidLoad];  
 15       
 16     //设置导航条标题  
 17     self.navigationItem.title = @"Pull Refresh";  
 18       
 19     if (_refreshTableView == nil) {  
 20         //初始化下拉刷新控件  
 21         EGORefreshTableHeaderView *refreshView = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height, self.view.frame.size.width, self.tableView.bounds.size.height)];  
 22         refreshView.delegate = self;  
 23         //将下拉刷新控件作为子控件添加到UITableView中  
 24         [self.tableView addSubview:refreshView];  
 25         _refreshTableView = refreshView;  
 26     }  
 27       
 28     //初始化用于填充表格的数据  
 29     NSArray *dataArray = [NSArray arrayWithObjects:@"Ryan",@"Vivi", nil];  
 30     self.array = dataArray;  
 31       
 32     //重新加载表格数据  
 33     [self.tableView reloadData];  
 34       
 35 }  
 36   
 37 -(void)viewDidUnload  
 38 {  
 39     [super viewDidUnload];  
 40     _refreshTableView = nil;  
 41 }  
 42   
 43 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation  
 44 {  
 45     return (interfaceOrientation == UIInterfaceOrientationPortrait);  
 46 }  
 47   
 48 # pragma mark -  
 49 # pragma mark UITableViewDataSource Methods  
 50 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView  
 51 {  
 52     return 10;  
 53 }  
 54   
 55 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section  
 56 {  
 57     return [self.array count];  
 58 }  
 59   
 60 //带头标题的表格设置标题方法  
 61 -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section  
 62 {  
 63     return [NSString stringWithFormat:@"Title %d",section + 1];  
 64 }  
 65   
 66 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  
 67 {  
 68     static NSString *CellIdentifier = @"CellIdentifier";  
 69     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];  
 70       
 71     if (!cell) {  
 72         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];  
 73     }  
 74       
 75     cell.textLabel.text = [self.array objectAtIndex:indexPath.row];  
 76       
 77     return cell;  
 78 }  
 79   
 80 #pragma mark -  
 81 #pragma mark Data Source Loading / Reloading Methods  
 82 //开始重新加载时调用的方法  
 83 - (void)reloadTableViewDataSource{  
 84     _reloading = YES;  
 85     //开始刷新后执行后台线程,在此之前可以开启HUD或其他对UI进行阻塞  
 86     [NSThread detachNewThreadSelector:@selector(doInBackground) toTarget:self withObject:nil];  
 87 }  
 88        
 89 //完成加载时调用的方法  
 90 - (void)doneLoadingTableViewData{  
 91     NSLog(@"doneLoadingTableViewData");  
 92       
 93     _reloading = NO;  
 94     [_refreshTableView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];      
 95     //刷新表格内容  
 96     [self.tableView reloadData];  
 97 }  
 98   
 99 #pragma mark -  
100 #pragma mark Background operation  
101 //这个方法运行于子线程中,完成获取刷新数据的操作  
102 -(void)doInBackground  
103 {  
104     NSLog(@"doInBackground");  
105       
106     NSArray *dataArray2 = [NSArray arrayWithObjects:@"Ryan2",@"Vivi2", nil];  
107     self.array = dataArray2;  
108     [NSThread sleepForTimeInterval:3];  
109       
110     //后台操作线程执行完后,到主线程更新UI  
111     [self performSelectorOnMainThread:@selector(doneLoadingTableViewData) withObject:nil waitUntilDone:YES];  
112 }  
113   
114   
115 #pragma mark -  
116 #pragma mark EGORefreshTableHeaderDelegate Methods  
117 //下拉被触发调用的委托方法  
118 -(void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView *)view  
119 {  
120     [self reloadTableViewDataSource];  
121 }  
122   
123 //返回当前是刷新还是无刷新状态  
124 -(BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView *)view  
125 {  
126     return _reloading;  
127 }  
128   
129 //返回刷新时间的回调方法  
130 -(NSDate *)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView *)view  
131 {  
132     return [NSDate date];  
133 }  
134   
135 #pragma mark -   
136 #pragma mark UIScrollViewDelegate Methods  
137 //滚动控件的委托方法  
138 -(void)scrollViewDidScroll:(UIScrollView *)scrollView  
139 {  
140     [_refreshTableView egoRefreshScrollViewDidScroll:scrollView];  
141 }  
142   
143 -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate  
144 {  
145     [_refreshTableView egoRefreshScrollViewDidEndDragging:scrollView];  
146 }  
147   
148 @end  

 

posted @ 2013-08-16 22:26  ubersexual  阅读(734)  评论(0编辑  收藏  举报