• EGO Refresh小总结


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

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

      总的来说,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天津大爆炸,为无辜的消防员默哀,好好珍惜身边的人。人生已经很不容易,不要再给我们增加负担了。

  • 相关阅读:
    用户画像
    华为离职副总裁徐家骏:年薪千万的工作感悟
    JAVA CAS原理深度分析-转载
    彻底理解ThreadLocal二
    彻底理解ThreadLocal一
    观察者模式(浅谈监听器工作原理)
    Java编程提高性能时需注意的地方
    Spring对Quartz的封装实现简单需注意事项
    FileInputStream和BufferedInputStream的区别
    java
  • 原文地址:https://www.cnblogs.com/tanglimei/p/4729344.html
Copyright © 2020-2023  润新知