下拉刷新类库EGOTableViewPullRefresh资源文件下载地址:
https://github.com/enormego/EGOTableViewPullRefresh/tree/
#import <UIKit/UIKit.h>
@class BaseTableView;
@protocol BaseTableViewDelegate <NSObject>
//下拉事件
- (void)refreshDown:(BaseTableView *)tableView;
//上拉事件
- (void)refreshUp:(BaseTableView *)tableView;
@end
#import "EGORefreshTableHeaderView.h"
@interface BaseTableView : UITableView<UITableViewDataSource,UITableViewDelegate,EGORefreshTableHeaderDelegate>
{
EGORefreshTableHeaderView *_refreshHeaderView;
BOOL _reloading;
UIButton *_moreButton;
}
@property (nonatomic,assign)BOOL isMore;
@property (nonatomic,assign)BOOL isrefreshHeader;
@property (nonatomic,retain)NSArray *dataList;
@property (nonatomic,assign)id<BaseTableViewDelegate> baseTableViewDelegate;
//关闭上拉加载更多
- (void)closeRefreshUp;
//关闭下拉刷新
- (void)doneLoadingTableViewData;
@end
#import "BaseTableView.h"
@implementation BaseTableView
- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style
{
self = [super initWithFrame:frame style:style];
if (self) {
// Initialization code
[self _initViews];
}
return self;
}
- (void)_initViews
{
//创建下拉刷新控件
_refreshHeaderView = [[EGORefreshTableHeaderView alloc]initWithFrame:CGRectMake(0, .0f - self.height, kScreenWidth, self.height)];
_refreshHeaderView.backgroundColor = [UIColor clearColor];
_refreshHeaderView.delegate = self;
self.isrefreshHeader = YES;
//创建下拉加载更多
_moreButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
_moreButton.backgroundColor = [UIColor clearColor];
_moreButton.frame = CGRectMake(0, 0, kScreenWidth, 40);
[_moreButton setTitle:@"上拉加载更多..." forState:UIControlStateNormal];
[_moreButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
_moreButton.titleLabel.font = [UIFont boldSystemFontOfSize:16.0f];
[_moreButton addTarget:self action:@selector(loadMoreAction) forControlEvents:UIControlEventTouchUpInside];
UIActivityIndicatorView *actvityView = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
actvityView.frame = CGRectMake(80, 10, 20, 20);
[actvityView stopAnimating];
actvityView.tag = 2014;
[_moreButton addSubview:actvityView];
[actvityView release];
self.isMore = YES;
//设置标示图的代理对象
self.dataSource = self;
self.delegate = self;
//去除背景颜色
self.backgroundColor = [UIColor clearColor];
self.backgroundView = nil;
}
- (void)loadMoreAction
{
//让按钮显示正在加载...
[_moreButton setTitle:@"正在加载..." forState:UIControlStateNormal];
UIActivityIndicatorView *actView = (UIActivityIndicatorView *)[_moreButton viewWithTag:2014];
[actView startAnimating];
if ([self.baseTableViewDelegate respondsToSelector:@selector(refreshUp:)]) {
[self.baseTableViewDelegate refreshUp:self];
}
}
//关闭上拉加载更多
- (void)closeRefreshUp
{
//让按钮显示正在加载...
[_moreButton setTitle:@"上拉加载更多..." forState:UIControlStateNormal];
UIActivityIndicatorView *actView = (UIActivityIndicatorView *)[_moreButton viewWithTag:2014];
[actView stopAnimating];
}
//控制当前上拉控件是否存在
- (void)setIsMore:(BOOL)isMore
{
if (_isMore != isMore) {
_isMore = isMore;
if (_isMore == YES) {
self.tableFooterView = _moreButton;
} else {
self.tableFooterView = nil;
}
}
}
//控制当前下拉控件是否存在
- (void)setIsrefreshHeader:(BOOL)isrefreshHeader
{
if (_isrefreshHeader != isrefreshHeader) {
_isrefreshHeader = isrefreshHeader;
if (_isrefreshHeader == YES ) {
[self addSubview:_refreshHeaderView];
} else {
[_refreshHeaderView removeFromSuperview];
}
}
}
//下拉刷新
#pragma mark -
#pragma mark Data Source Loading / Reloading Methods
//显示下拉加载
- (void)showRefreshHeader {
[_refreshHeaderView initLoading:self];
}
- (void)reloadTableViewDataSource{
_reloading = YES;
}
- (void)doneLoadingTableViewData{
_reloading = NO;
[_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self];
}
#pragma mark -
#pragma mark UIScrollViewDelegate Methods
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
[_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView];
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
[_refreshHeaderView egoRefreshScrollViewDidEndDragging:scrollView];
//上拉刷新
float height= scrollView.contentOffset.y + scrollView.height -scrollView.contentSize.height;
if (height >= 40 && self.isMore == YES) {
[self loadMoreAction];
}
}
#pragma mark -
#pragma mark EGORefreshTableHeaderDelegate Methods
//下拉到一定距离,手指放开时调用
- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{
[self reloadTableViewDataSource];
if ([self.baseTableViewDelegate respondsToSelector:@selector(refreshDown:)]) {
[self.baseTableViewDelegate refreshDown:self];
}
//停止加载,弹回下拉
// [self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:3.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
}