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
{
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
相关文章推荐
- iOS 下拉刷新动画的实现实例
- 开源中国iOS客户端学习——(二)下拉刷新特效EGOTableViewPullRefresh
- MJRefresh-- iOS下拉刷新第三方类库
- iOS中的下拉刷新SVPullToRefresh
- iOS TableView实现下拉刷新数据
- 关于iOS中UITableView下拉距离短刷新没事,下拉距离长就会崩溃的问题解决方案
- IOS上、下拉表视图刷新加载数据
- iOS开发 - 让tableView不能下拉刷新,可以上拉加载
- 《React-Native系列》23、 js实现下拉刷新效果(Android和iOS通用)
- iOS 利用MJRefresh实现上拉刷新下拉加载(自定义动画)
- iOS UITableView 实现上拉及下拉刷新
- IOS 添加下拉刷新
- iOS 利用MJRefresh实现上拉刷新下拉加载(自定义动画)
- IOS快速集成下拉上拉刷新
- iOS 上拉刷新 下拉加载
- iOS-----iOS UITableView 实现上拉及下拉刷新
- 实现下拉刷新效果 仅适用于IOS 6.0
- iOS 上拉刷新和下拉加在更多(第三方框架EGOTableViewPullRefresh)
- 3D 效果的下拉列表刷新 iOS 控件:AH3DPullToRefresh
- iOS:上拉刷新,下拉加载