zoukankan      html  css  js  c++  java
  • 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  
  • 相关阅读:
    JavaScript讲义(三)
    jQuery学习(五)
    jQuery学习(七)
    JavaScript讲义(一)
    jQuery学习(六)
    这些东西不宜空腹吃[转]
    pexpect实现的ssh连接(pexpect可从sourceforge下载)
    Using the commandline connection tool Plink
    【转】系统管理类DOS命令汇总
    挺有意思的QQ资料
  • 原文地址:https://www.cnblogs.com/ubersexual/p/3263618.html
Copyright © 2011-2022 走看看