您的位置:首页 > 移动开发 > IOS开发

iOS 下拉刷新

2013-08-23 22:16 267 查看
@interface MainViewController : UITableViewController<UITableViewDelegate,UITableViewDataSource,EGORefreshTableHeaderDelegate>  

{  

    EGORefreshTableHeaderView *_refreshTableView;  

    BOOL _reloading;  

}  

  

@property (strong,nonatomic) NSArray *array;  

  

//开始重新加载时调用的方法  

- (void)reloadTableViewDataSource;  

//完成加载时调用的方法  

- (void)doneLoadingTableViewData;  

  

@end

=================================================

#import "MainViewController.h"  

  

@interface MainViewController ()  

  

@end  

  

@implementation MainViewController  

@synthesize array = _array;  

  

#pragma mark -  

#pragma mark View life cycle  

-(void)viewDidLoad  

{  

    [super viewDidLoad];  

      

    //设置导航条标题  

    self.navigationItem.title = @"Pull Refresh";  

      

    if (_refreshTableView == nil) {  

        //初始化下拉刷新控件  

        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)];  

        refreshView.delegate = self;  

        //将下拉刷新控件作为子控件添加到UITableView中  

        [self.tableView addSubview:refreshView];  

        _refreshTableView = refreshView;  

    }  

      

    //初始化用于填充表格的数据  

    NSArray *dataArray = [NSArray arrayWithObjects:@"Ryan",@"Vivi", nil];  

    self.array = dataArray;  

      

    //重新加载表格数据  

    [self.tableView reloadData];  

      

}  

  

-(void)viewDidUnload  

{  

    [super viewDidUnload];  

    _refreshTableView = nil;  

}  

  

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation  

{  

    return (interfaceOrientation == UIInterfaceOrientationPortrait);  

}  

  

# pragma mark -  

# pragma mark UITableViewDataSource Methods  

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView  

{  

    return 10;  

}  

  

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section  

{  

    return [self.array count];  

}  

  

//带头标题的表格设置标题方法  

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section  

{  

    return [NSString stringWithFormat:@"Title %d",section + 1];  

}  

  

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  

{  

    static NSString *CellIdentifier = @"CellIdentifier";  

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];  

      

    if (!cell) {  

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];  

    }  

      

    cell.textLabel.text = [self.array objectAtIndex:indexPath.row];  

      

    return cell;  

}  

  

#pragma mark -  

#pragma mark Data Source Loading / Reloading Methods  

//开始重新加载时调用的方法  

- (void)reloadTableViewDataSource{  

    _reloading = YES;  

    //开始刷新后执行后台线程,在此之前可以开启HUD或其他对UI进行阻塞  

    [NSThread detachNewThreadSelector:@selector(doInBackground) toTarget:self withObject:nil];  

}  

       

//完成加载时调用的方法  

- (void)doneLoadingTableViewData{  

    NSLog(@"doneLoadingTableViewData");  

      

    _reloading = NO;  

    [_refreshTableView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];      

    //刷新表格内容  

    [self.tableView reloadData];  

}  

  

#pragma mark -  

#pragma mark Background operation  

//这个方法运行于子线程中,完成获取刷新数据的操作  

-(void)doInBackground  

{  

    NSLog(@"doInBackground");  

      

    NSArray *dataArray2 = [NSArray arrayWithObjects:@"Ryan2",@"Vivi2", nil];  

    self.array = dataArray2;  

    [NSThread sleepForTimeInterval:3];  

      

    //后台操作线程执行完后,到主线程更新UI  

    [self performSelectorOnMainThread:@selector(doneLoadingTableViewData) withObject:nil waitUntilDone:YES];  

}  

  

  

#pragma mark -  

#pragma mark EGORefreshTableHeaderDelegate Methods  

//下拉被触发调用的委托方法  

-(void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView *)view  

{  

    [self reloadTableViewDataSource];  

}  

  

//返回当前是刷新还是无刷新状态  

-(BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView *)view  

{  

    return _reloading;  

}  

  

//返回刷新时间的回调方法  

-(NSDate *)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView *)view  

{  

    return [NSDate date];  

}  

  

#pragma mark -   

#pragma mark UIScrollViewDelegate Methods  

//滚动控件的委托方法  

-(void)scrollViewDidScroll:(UIScrollView *)scrollView  

{  

    [_refreshTableView egoRefreshScrollViewDidScroll:scrollView];  

}  

  

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate  

{  

    [_refreshTableView egoRefreshScrollViewDidEndDragging:scrollView];  

}  

  

@end  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: