ios下拉刷新上拉加载EGORefresh简单实现

前提下载 EGORefreshTableHeaderView.h  EGORefreshTableHeaderView.m
EGORefreshTableFootView.h     EGORefreshTableFootView.m  以及8张图片
并拖入工程

在.pch文件里导入

#import "EGORefreshTableHeaderView.h"

#import "EGORefreshTableFootView.h"
在.h文件里

UIScrollViewDelegate,EGORefreshTableHeaderDelegate,EGORefreshTableFootDelegate>

{

EGORefreshTableHeaderView *_refreshHeaderView;

EGORefreshTableFootView* _footerView;

//  Reloading var should really be your tableviews datasource

//  Putting it here for demo purposes

BOOL _reloading;

BOOL _headerRefresh;

}

@property (nonatomic ,assign) NSInteger pageNumber;

@property(retain,nonatomic)UITableView *tableView;

@property (nonatomic ,retain) NSMutableArray * newdataArray;//新闻数据数组

在.m文件里

viewdidload里

当前页

_pageNumber = 1;

创建刷新视图

_refreshHeaderView = [[EGORefreshTableHeaderView alloc] init];

_refreshHeaderView.frame = CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height, self.tableView.bounds.size.width, self.tableView.bounds.size.height);

_refreshHeaderView.delegate = self;

[self.tableView addSubview:_refreshHeaderView];

_footerView = [[EGORefreshTableFootView alloc] init];

_footerView.frame = CGRectMake(0,0, self.tableView.bounds.size.width, 0);

_footerView.delegate = self;

self.tableView.tableFooterView = _footerView;

[_refreshHeaderView refreshLastUpdatedDate];

然后在外面导入

#pragma mark - 下拉刷新

- (void)finishRefresh{

//LOG_METHOD;

if (NO == _headerRefresh) {

//上拉加载

[self.tableView reloadData];

[_footerView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];

}

else{

//下拉刷新 默认刷新

[self.tableView reloadData];

[_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];

}

_reloading = NO;

}

- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView *)view{

//LOG_METHOD;

_reloading = YES;

_pageNumber = 1;

[self loadnewdata];

[NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(finishRefresh) userInfo:nil repeats:NO];

}

- (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView *)view{

//   NSLog(@"isLoading");

//LOG_METHOD;

return _reloading;

}

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

//LOG_METHOD;

return [NSDate date];

}

#pragma mark - Footer Refresh delegate methods

- (void)egoRefreshTableFootDidTriggerRefresh:(EGORefreshTableFootView*)view{

//LOG_METHOD;

_reloading = YES;

_pageNumber = _pageNumber+1;

int second = [self.newdataArray count];

int index = second/ 10;

second = second - index*10;

if (second <= 0) {

[self loadnewdata];

}

[NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(finishRefresh) userInfo:nil repeats:NO];

}

- (BOOL)egoRefreshTableFootDataSourceIsLoading:(EGORefreshTableFootView*)view{

//LOG_METHOD;

return _reloading;

}

- (NSDate*)egoRefreshTableFootDataSourceLastUpdated:(EGORefreshTableFootView*)view{

//LOG_METHOD;

return  [NSData data];

}

#pragma mark - scroll delegate methods

//scrollView delegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

//LOG_METHOD;

CGPoint offset1 = scrollView.contentOffset;

CGRect bounds1 = scrollView.bounds;

UIEdgeInsets inset1 = scrollView.contentInset;

float y1 = offset1.y + bounds1.size.height - inset1.bottom;

if (y1 > self.tableView.frame.size.height) { //判断是下拉刷新 还是上拉加载

_headerRefresh = NO;    //上拉加载

[_footerView egoRefreshScrollViewDidScroll:scrollView];

}

else if (y1 < self.tableView.frame.size.height) {

_headerRefresh = YES;   //下拉刷新

[_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView];

}

else if (y1 == self.tableView.frame.size.height) {

//        DLog(@"%@", flagShuaxin ? @"上拉刷新" : @"下拉刷新");

}

}

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

//LOG_METHOD;

if (YES == _headerRefresh ) { //下拉刷新

[_refreshHeaderView egoRefreshScrollViewDidEndDragging:scrollView];

}

else{ //上拉加载更多

[_footerView egoRefreshScrollViewDidEndDragging:scrollView];

}

}

请求数据

-(void)loadnewdata{

NSString *str=[hostname stringByAppendingString:HttpForNewsdataShow];

NSString *astr=[NSString stringWithFormat:@"?ChannelID=%@&PageNums=10&CurrentPage=%d",self.lanmuID,_pageNumber];

NSString *allstrurl=[str stringByAppendingString:astr];

NSLog(@"allstrurl   %@",allstrurl);

ASIFormDataRequest *requestlogin = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:allstrurl]];

requestlogin.tag = 300;

requestlogin.delegate = self;

[requestlogin startAsynchronous];

}

请求成功后

if (request.tag == 300)

{

NSString* jsonStr = [request responseString];

NSMutableDictionary * dic1;

dic1 = [jsonStr JSONValue];

NSMutableArray * array = [dic1 objectForKey:@"result"];

if (_pageNumber == 1) {

[self.newdataArray removeAllObjects];

self.newdataArray = [NSMutableArray arrayWithArray:array] ;

self.tableView.tableFooterView.hidden = NO;

}

else

{

[self.newdataArray addObjectsFromArray:array];

}

if ([array count]< 10) {

self.tableView.tableFooterView.hidden = YES;

}

[self.tableView  reloadData];

}

运行大功告成!!!!

时间: 2024-10-07 07:38:00

ios下拉刷新上拉加载EGORefresh简单实现的相关文章

最新Android ListView 下拉刷新 上滑加载

开发项目过程中基本都会用到listView的下拉刷新和上滑加载更多,之前大家最常用的应该是pull to refresh或它的变种版吧,google官方在最新的android.support.v4包中增加了一个新类SwipeRefreshLayout,地址 这个类的作用就是提供官方的下拉刷新,并且效果相当不错,而上拉加载更多则用我们自定义的listview,也是相当简单. 下拉刷新 简单的介绍下: 首先它是一个viewgroup,但是它只允许有一个子控件,子控件能是任何view,使用的时候,所在

十分钟实现ListView下拉刷新上滑加载更多

说到ListView下拉刷新几乎每个APP都会用到,所以ListView下拉刷新是很重要的,就像ListView优化一样是你必会的东西. ListView实现下拉刷新如果我们开发人员自己编写相对来说比较费事的,当我们使用第三方库之后我们再来开发这个功能就会省事很多.相比与自己实现可以少编写不少代码,Android-PullToRefresh库可以轻松实现ListView的下拉刷新功能. 要使用Android—PullToRefesh库对ListView实现下拉刷新要经过以下几个步骤: 1.下载A

Android 下拉刷新上啦加载SmartRefreshLayout + RecyclerView

在弄android刷新的时候,可算是耗费了一番功夫,最后发觉有现成的控件,并且非常好用,这里记录一下. 原文是 https://blog.csdn.net/huangxin112/article/details/78781682 ,这里是看了之后,结合自己实际遇到的问题写的. 首先引入包. //下拉框 implementation 'com.android.support:recyclerview-v7:28.0.0-beta01' implementation 'com.scwang.smar

android 下拉刷新上拉加载更多,高仿ios左滑动删除item,解决了众多手势问题

一.前言 老规矩,别的不说,这demo是找了很相关知识集合而成的,可以说对我这种小白来说是绞尽脑汁!程序员讲的是无图无真相!现在大家一睹为快! 二.比较关键的还是scroller这个类的 package com.icq.slideview.view; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.util.TypedValue; i

IOS开发之XML解析以及下拉刷新上拉加载更多的分享

IOS开发之XML解析 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示XML文件版本, 内部文本使用的编码 <root> 表示根节点 <CityName>北京</CityName>  一个结点, CityName是结点名, 北京结点值 <Item key="1" value="A"></Item>  

XML解析以及下拉刷新上拉加载的一些基本使用

---恢复内容开始--- IOS开发之XML解析 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示XML文件版本, 内部文本使用的编码 <root> 表示根节点 <CityName>北京</CityName>  一个结点, CityName是结点名, 北京结点值 <Item key="1" value="A"><

IOS学习之UiTableView下拉刷新与自动加载更多,百年不变的效果

IOS学习之UiTableView下拉刷新与自动加载更多,百年不变的效果(五) 五一劳动节马上来临,小伙伴有妹有很激动哟,首先祝天下所有的程序猿节日快乐!这个五一对于我来说有点不一样,我的人生从这个五一就转弯了,爱情长跑8年的我结婚了,一会支付宝账号我会公布出去,请自觉打款!谢谢合作. 灯光闪起来: 舞蹈跳起来: 歌曲唱起来: -------------------------------------------------------------------------------------

自个儿写Android的下拉刷新/上拉加载控件 (续)

本文算是对之前的一篇博文<自个儿写Android的下拉刷新/上拉加载控件>的续章,如果有兴趣了解更多的朋友可以先看一看之前的这篇博客. 事实上之所以会有之前的那篇博文的出现,是起因于前段时间自己在写一个练手的App时很快就遇到这种需求.其实我们可以发现类似这样下拉刷新.上拉加载的功能正在变得越来越普遍,可以说如今基本上绝大多数的应用里面都会使用到.当然,随着Android的发展,已经有不少现成的可以实现这种需求的"轮子"供我们使用了. 但转过头想一下想,既然本来就是自己练手

Maxwin-z/XListView-Android(下拉刷新上拉加载)源码解析(一)

本次解析的内容,是github上一个用于下拉刷新上拉加载的控件xlistview,这个功能相信大家在开发的过程中会经常用到. 控件的源码地址是https://github.com/Maxwin-z/XListView-Android 在这个控件之前,我看过一些相同功能的控件,挑选后觉得XListView功能比较完善,而且易于理解.在android-open-project里面,有提到一个DropDownListView,个人使用过以后,觉得功能是具备了,但是操作体验不好,原因就是没有使用到Scr

android 安卓 listview 支持下拉刷新 上拉加载更多

[1]重写listView import java.text.SimpleDateFormat; import java.util.Date; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.ViewGrou