MJRefresh是iOS开发用的最多的上拉加载和下拉刷新的第三方,对于MJRefreshHeader的定制也十分简单,先看一下效果
点开MJRefresh的目录文件,会看到在Base里面,有一个分别叫做MJRefreshComponent和MJRefreshHeader的类,然后在下面的Header文件夹下包含了MJRefreshStateHeader,MJRefreshGifHeader,MJRefreshNormalHeader三个自带的header控件,然后我们定制的方法和MJRefreshStateHeader一样(后面两个header继承自MJRefreshStateHeader,然后MJRefreshStateHeader继承自MJRefreshHeader,MJRefreshHeader继承自MJRefreshComponent)
点开MJRefreshHeader.m文件,会看到它的两个构造方法
/** 创建header */
+ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
/** 创建header */
+ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
我们在使用MJRefresh的时候基本上就是从这两个构造方法开始的,所以定制完成的header使用方法和之前一样,替换一下面子就好了。其逻辑大体上就是,创建了一个继承自MJRefreshHeader的自定义header,就是MJDIYHeader,然后MJDIYHeader使用父类MJRefreshHeader的构造方法,将它自己返回给我们,也就是上面两个构造方法返回的renturn cmp;然后看主要代码;
主要就是覆盖父类的方法,实现以下三个函数,后面的监听可以不实现
- (void)prepare
- (void)placeSubviews
- (void)setState:(MJRefreshState)state//可以不实现,主要是根据状态改变,现实不同的内容
在prepare里面创建我们需要的控件,在placeSubviews里面给定我们定义的控件的坐标,然后整个header就差不多定义完成了。其中需要注意的是self.mj_h = 60;这个参数,他是header可以下拉的高度。header定义完了,剩下footer定义的方法和header基本上一样,就不多说了。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
微信下拉加载的实现
之前有同事要实现微信下拉加载消息平滑过度的效果,百度了之后说是要是重写UITableview里面的setContentSize方法,反正感觉挺麻烦的。其实MJRefresh就可以简单的实现,在请求数据结束之后加上下面被选中的几句代码就好了,数据解析的过程需要你们自己写,我只是随便写了一下;
网友评论