这几天项目做完,有点闲,正好可以用来做做总结。

  忘了是哪位博客大牛说:不能因为知识点小、少而不做总结。 那么现在就开始实践一把吧~ 

  总的来说,EGO有几点需要设置,设置完之后,就能够自如地用了。

1.设置EGO的frame,添加在tableView上面。(我一开始在这里栽了很多跟头,设置了很多frame都显示不出来。现在想想,在没有明白他的原理时去瞎鼓捣,我不栽跟头,谁栽跟头)

2.设置EGO的代理

3.实现EGO的代理

4.注意在代理实现时和本来的tableview的结合。(这一点最主要的是要和本页的网络请求结合在一起,否则加了下拉刷新也没用)

1.设置EGO的frame,添加在tableView上面。

-(void)createHeaderView{
EGORefreshTableHeaderView * refreshHeaderView = [[EGORefreshTableHeaderView alloc]initWithFrame:CGRectMake(0,-self.tableView.bounds.size.height, self.tableView.frame.size.width, self.tableView.bounds.size.height)];
refreshHeaderView.delegate = self;
_refreshHeaderView = refreshHeaderView; //_refreshHeaderView被设置为公共属性,见下面的5.2
[self.tableView addSubview:_refreshHeaderView]; 
[_refreshHeaderView refreshLastUpdatedDate]; }

  1.1 EGO的frame:从上面看来,EGORefreshView是添加在tableView上的。坐标是(0,-self.tableView.bounds.size.height),也就是说,相当于在tableView的上面,添加了一个EGORefreshView,而且这个EGORefreshView的最下面正好和tableView相接。size是(self.tableView.X_width, self.tableView.bounds.size.height),可以看出宽度和高度和tableView的宽和高都是一样的。--归根结底,就是在我们看到的tableView上面,添加了一个等大的EGORefreshView。 明白了这个原理之后,我们可以得出EGORefreshView的高度无需设置这么大,只需要把EGORefreshView显示出来,就可以了。刚才设置了一个60,能够正常显示。不过为了保险起见,我们设置为tableView的高度也无妨。如果tableView的高度比较小的话,EGORefreshView就不能正确显示出来了,这时候可以单独设置一下。

  1.2 添加EGORefreshView,是添加在tableView上面的,不能添加在View上面,否则tableView会覆盖住EGORefreshView的。

  1.3 refreshLastUpdatedDate 更新刷新的时间,如果不显示时间,可以将这个去掉。

2.设置EGO的代理

  EGORefreshView的协议是:EGORefreshTableDelegate,在.h里面实现这个代理,并将代理的委托设置为self。 保险起见:如果代理方法没有实现的时候,可以在这里打印一下,看看delegate是不是ox0.

3.实现EGO的代理

- (void)egoRefreshTableDidTriggerRefresh:(EGORefreshPos)aRefreshPos;

- (BOOL)egoRefreshTableDataSourceIsLoading:(UIView*)view;

@optional

- (NSDate*)egoRefreshTableDataSourceLastUpdated:(UIView*)view;

-(void)egoRefreshTableDidTriggerRefresh:(EGORefreshPos)aRefreshPos{
_reloading = YES; //公共属性,用来记录现在有没有被刷新
[self toGetServer];//去请求服务器的方法,是自己定义的
} -(BOOL)egoRefreshTableDataSourceIsLoading:(UIView *)view{
return _reloading;//公共属性,用来记录现在有没有被刷新
}
-(NSDate *)egoRefreshTableDataSourceLastUpdated:(UIView *)view{
  return [NSDate date];
}

  

前面两个是必须要实现的。第一个方法,是开始刷新时触发的方法,第二个,是监测EGORefreshView是否正在刷新;第三个是返回刷新时间的,如果不显示时间,可以不用去实现。

4.另外,还有UIScrollView的delegate,如果实现了UITableView的delegate,这个是不用写的,因为UITableView是UIScrollView的子类

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

[_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView];

}

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

[_refreshHeaderView egoRefreshScrollViewDidEndDragging:scrollView];

}

5.这样,我们这里面还缺少几个小细节

  5.1 我们要设置EGORefreshView为公共属性,这样,我们就可以直接取值了。

@property(nonatomic, strong)EGORefreshTableHeaderView * refreshHeaderView;

  5.2 我们还要设置一个bool类型,还标志EGORefreshView是否在刷新。

@property(nonatomic, assign)BOOL reloading;

6.以为这样就完事了吗?

  还没有,因为我们要做网络请求。

  6.1 网络请求的方法,建议放置在一个方法里面,这样,在刚开始的时候要进行一次网络请求,后面在下拉刷新时,同样也需要进行网络请求,直接调用方法就可以了。

  6.2 在网络请求结束时,无论是成功还是失败,都要让EGORefreshView停止,否则菊花会一直在转。

    _reloading = NO;
[_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];

  

7.总结:

  EGO是个很不错的封装类,帮我们做了很多事情,现在有更简单的方式,M了个J的下拉刷新更简单。只需要一句话就搞定了,不过我还没怎么用过。到时候再总结。

8  补充

  如果有移除的需要,可以这么写

-(void)removeHeaderView{
if (_refreshHeaderView && [_refreshHeaderView superview]) {
[_refreshHeaderView removeFromSuperview];
_refreshHeaderView = nil;
}
}

  

  昨天一直在关注8.12天津大爆炸,为无辜的消防员默哀,好好珍惜身边的人。人生已经很不容易,不要再给我们增加负担了。

EGO Refresh小总结的更多相关文章

  1. Vue2.0 开发移动端音乐webApp 笔记

    项目预览地址:http://ustbhuangyi.com/music/#/recommend 获取歌曲 url 地址方法升级:https://github.com/ustbhuangyi/vue-m ...

  2. 微信小程序开发日记——高仿知乎日报(中)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教 ...

  3. 微信小程序开发日记——高仿知乎日报(上)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...

  4. ASP.NET OWIN OAuth:refresh token的持久化

    在前一篇博文中,我们初步地了解了refresh token的用途——它是用于刷新access token的一种token,并且用简单的示例代码体验了一下获取refresh token并且用它刷新acc ...

  5. IOS-小项目(饿了么 网络部分 简单实现)

    在介绍小项目之前,在此说明一下此代码并非本人所写,我只是随笔的整理者. 在介绍之前先展现一下效果图. 看过效果图大家应该很熟悉了,就是饿了么的一个界面而已,值得注意的是,实现时并没有采用本地连接,而是 ...

  6. HTML+CSS中的一些小知识

    今天分享一些HTML.CSS的小知识,希望能够对大家有所帮助! 1.解决网页乱码的问题:最重要的是要保证各个环节的字符编码一致! (1)编辑器的编辑环境的字符集(默认字符集):Crtl+U 常见的编码 ...

  7. Unity小游戏制作 - 暗影随行

    用Unity制作小游戏 - 暗影惊吓 最近玩了一个小游戏,叫做暗影惊吓,虽然是一个十分简单的小游戏,但是感觉还是十分有趣的.这里就用Unity来实现一个类似的游戏. 项目源码:DarkFollow 主 ...

  8. 解决JqueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug

    前些日子不是在做 使用Jquery-UI实现一次拖拽多个选中的元素操作嘛,在持续完善这个组件时遇到了一个关于拖放排序的bug.今天就着图片和代码重现一下,也顺便告诉大家如何解决这个问题. 首先先上图描 ...

  9. 微信小程序之知乎日报

    上一次的<微信小程序之小豆瓣图书>制作了一个图书的查询功能,只是简单地应用到了网络请求,其他大多数小程序应有的知识.而本次的示例是知乎日报,功能点比较多,页面也比上次复杂了许多.在我编写这 ...

随机推荐

  1. 【BZOJ】1192: [HNOI2006]鬼谷子的钱袋(水题)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1192 看到题我就好像想起以前小学升学考数学的最后一题,将一条金块分割最少的部分,使得每一天都能够支付 ...

  2. NOIP200003方格取数

    NOIP200003方格取数 难度级别: D: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 XYZ 是首师大附中信息技术团编 ...

  3. Java_BigDecimal类型比较大小

    这个类是java里精确计算的类 1 比较对象是否相等 一般的对象用equals,但是BigDecimal比较特殊,举个例子: BigDecimal a=BigDecimal.valueOf(1.0); ...

  4. Qt 程序和窗口添加图标

    Qt项目在打包发布之后都需要有个个性的程序图标和窗口图标,这样会使程序更加美观大方,下面我们分别来看如何给程序和窗口分别添加图标.我们需要两种格式的图片,一种是.ico的,用来给程序添加图标,一种是. ...

  5. opengl中层次建模的实现

    1.显示列表的创建 例如: glNewList(listID,listMode); glutSolidCube(2.0); ...... glEndlist(); 可以创建一个listID显示列表,l ...

  6. filesize返回的是以字节为单位的数据也可以使之处理数字

    1.文件的属性信息获取 首先文件具有类型,在linux下边,有block(块设备,如磁盘分区.CD-ROM).char(以字符为输入的设备,如键盘.打印机).dir(目录类型,目录也是文件的一种).f ...

  7. 分布式架构高可用架构篇_05_fastdfs集群的安装

    参考: 龙果学院http://www.roncoo.com/share.html?hamc=hLPG8QsaaWVOl2Z76wpJHp3JBbZZF%2Bywm5vEfPp9LbLkAjAnB%2B ...

  8. 【转】区别和认识.Net四个判等函数

    原文地址:不详 .Net有四个判等函数?不少人看到这个标题,会对此感到怀疑.事实上确是如此,.Net提供了ReferenceEquals.静态Equals,具体类型的Equals以及==操作符这四个判 ...

  9. 【转】MySQL数据库原理

    原文地址:http://www.cnblogs.com/qiuyi116/p/4349233.html 我们知道,数据是信息的载体——一种我们约定了如何解释的符号.在计算机系统中,最常见的应该是文本数 ...

  10. PHP 错误与异常 笔记与总结(11 )register_shutdown_function() 函数的使用

    通过 register_shutdown_function 方法,可以让我们设置一个当执行关闭时可以被调用的另一个函数. 也就是说,当我们的脚本执行完成或者意外死掉导致 php 执行即将关闭时,我们的 ...