IOS开发笔记(2)EGOTableViewPullRefresh实现列表的下拉刷新功能

本文介绍如何使用EGOTableViewPullRefresh实现iOS应用中的上拉刷新功能。具体步骤包括从GitHub下载开源库、整合资源文件到项目中,并在代码中实现数据刷新逻辑。

现在流行的列表上拉刷新基本上都是使用的EGOTableViewPullRefresh开源的类库。

1、到github上下载EGOTableViewPullRefresh

https://github.com/enormego/EGOTableViewPullRefresh

2、下载后的文件夹中包含以下内容

将EGOTableViewPullRefresh中的Resources文件夹中的所有图片全部都拷贝到自己的工程的Resources文件夹下,这些图片是下拉箭头及tableView的headerView的背景图片。在EGOTableViewPullRefresh文件夹下的Classes文件夹下的View文件夹下有两个文件,分别是EGORefreshTableHeaderView.h和EGORefreshTableHeaderView.m文件,将这两个文件放到自己的工程下。到此为止准备工作就做完了。

3、下拉是一个刷新的工作,所以需要我们添加的代码无非就是数据刷新的代码。

(1)在.h文件中添加如下代码

#import "EGORefreshTableHeaderView.h"

@interface RootViewController : UITableViewController  <EGORefreshTableHeaderDelegate, UITableViewDelegate, UITableViewDataSource>{
	
	EGORefreshTableHeaderView *_refreshHeaderView;
	
	//  Reloading var should really be your tableviews datasource
	//  Putting it here for demo purposes 
	BOOL _reloading;
}

- (void)reloadTableViewDataSource;
- (void)doneLoadingTableViewData;

(2)在- (void)viewDidLoad函数中添加下面的代码。

if (_refreshHeaderView == nil) {
		
		EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame: CGRectMake(0.0f, self.tableView.contentSize.height, 320, 650)];
        NSLog(@"%@", NSStringFromCGRect( view.frame ));
		view.delegate = self;
		[self.tableView addSubview:view];
		_refreshHeaderView = view;
		[view release];
		
	}
	
	//  update the last update date
	[_refreshHeaderView refreshLastUpdatedDate];

(3)在对应的.m文件中添加如下方法

#pragma mark -
#pragma mark Data Source Loading / Reloading Methods

- (void)reloadTableViewDataSource{
	
	//  should be calling your tableviews data source model to reload
	//  put here just for demo
	_reloading = YES;
	
}

- (void)doneLoadingTableViewData{
	
	//  model should call this when its done loading
	_reloading = NO;
	[_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];
	
}


#pragma mark -
#pragma mark UIScrollViewDelegate Methods

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{	
	
	[_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView];
		
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
	
	[_refreshHeaderView egoRefreshScrollViewDidEndDragging:scrollView];
	
}


#pragma mark -
#pragma mark EGORefreshTableHeaderDelegate Methods

- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{
	
	[self reloadTableViewDataSource];
	[self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:4.0];
	
}

- (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{
	
	return _reloading; // should return if data source model is reloading
	
}

- (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{
	
	return [NSDate date]; // should return date data source was last changed
	
}

4、总结

A:这个是在底部加刷新。如果在顶部加刷新那么只要修改下ViewDidload的创建代码

EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, -320.0f, self.view.frame.size.width, 320)];
B:如果想同时在顶部或者底部都加上刷新,可以参考我另外一个帖子(关于糗百,开发笔记一里面所使用的方法)

C:如果想实现在列表最后一行实现点击查询,那么可以在列表下多加一行,自己写一个类继承UItableviewcell,然后在点击事件里面做一个判断。

D:假如遇到数据刷新之后那个顶部的view还在刷新,这个可能是egoRefreshTableHeaderDidTriggerRefresh里面同步执行的代码

- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView *)view
{
    [self reloadTableViewDataSource];
    [self performSelector:@selector(refresh) withObject:nil afterDelay:2.0f];
   // [self refresh];
    
}

这里 读取数据的操作必须是异步的,要不然和tableView下拉再上弹这个动作会有很明显的延迟。



viewDidLoad

viewDidLoad

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值