iOS MJ 刷新 一些自定义
https://www.cnblogs.com/yajunLi/p/5735990.html
下拉刷新控件目前比较火的有好几种,本人用过MJRefresh 和 SVPullToRefresh,相对而言,前者比后者可定制化、拓展新都更高一点。
因此本文着重讲一下MJRefresh的简单用法。
导入项目:
cocoapods导入:
pod 'MJRefresh'
手动导入:
将
MJRefresh
文件夹中的所有文件拽入项目中导入主头文件:
#import "MJRefresh.h"
下拉刷新:
广泛性分为6种使用场景,分别对应:默认、动画图片、隐藏时间、隐藏时间和状态、自定义文字说明、以及自定义刷新控件。
下面就各种场景分别讲一下:
1、默认场景
包含刷新菊花、下拉说明、时间
使用代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
2、使用动画图片
PS:这里的动画并不是用gif实现的,而是利用序列帧(即若干图片组成一个不同状态下的图片数组,然后根据位置显示不同图片)去展现。
1 2 3 4 5 6 7 8 9 |
|
这里用大众点评吃包子图片为例,新建一个自定义类 MJChiBaoZiHeader,继承:MJRefreshGifHeader
#import "MJRefreshGifHeader.h"
@interface MJChiBaoZiHeader : MJRefreshGifHeader
@end
然后重写prepare方法,代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
关键点就是这里的两个图片数组,60是因为下拉控件默认拉动距离就是60距离,这里比较严谨,利用60张不同图片去对应每个距离点,当然实际中,我们可以缩减,不需要精确到每个距离点对应一张图片,这里个人自己决定。
这里需要先了解下,下拉的五种状态。如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 |
|
1 |
|
3、下拉刷新 隐藏时间
这里与默认的区别就是不显示上次刷新时间,使用方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
4、下拉刷新 隐藏状态和时间
这个场景一般适用于只需要动画展示,简洁清爽,也是用的蛮多的。
同样,处理很简单。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
5、下拉刷新 自定义文字
想自己DIY个性文字描述,一样很简单。
不管是文字text、文字大小、还是颜色都一句话搞定。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
6、下拉刷新 自定义刷新控件
上面的都不够玩,怎么办,没关系,还有最后一种更定制化的方法:自己加控件样式。
这里不限于任何控件,我们可以在头部的这片区域,尽情添加Subviews,但记住一点,高度千万不要吵过header高度(默认60)。
除了控件,甚至可以自己绘制动画等等。
实现原理:同样先自定义自己的类,继承 MJRefreshHeader
重写 prepare 方法,再重写 placeSubviews 方法 设置位置。
代码:
a、定义控件属性
1 2 3 4 5 6 |
|
b、重写prepare方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
c、重写 placeSubviews
1 2 3 4 5 6 7 8 9 10 11 12 |
|
d、根据下拉位移,自定义不同位移的控件展示,比如显示不同文字,颜色等
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
上拉刷新:
上拉刷新加载和下拉很类似,这里我只讲几点小注意点:
1、MJRefreshBackNormalFooter 和 MJRefreshAutoNormalFooter都能实现上拉加载,
不过两者有点区别:前者的上拉区域在tableview的底部,后者是紧跟在数据下方。这个大家可以视情况选择。
2、如果选择的MJRefreshAutoNormalFooter,可能会遇到一个:“点击或上拉加载更多”会一直存在的问题,如何去掉呢?
解决办法:
1、修改源码,在MJRefreshConst.m里更改这句话:
NSString *const MJRefreshAutoFooterIdleText = @"";
2、设置isAutomaticallyChangeAlpha属性为yes。
参考代码:
let mjfoot = MJRefreshBackNormalFooter {
if weakself?.lastId == -1 || weakself?.pageIndex == -1{
weakself?.tableView.mj_footer.endRefreshingWithNoMoreData()
return
}
weakself?.requestData()
}
mjfoot?.setTitle("没有更多数据了", for: .noMoreData)
mjfoot?.isAutomaticallyChangeAlpha = true
tableView.mj_footer = mjfoot
3、设置没有数据时,不显示上拉加载说明
func setMJFooterVisible() {
if ELList.count <= 0 {
tableView.mj_footer.isHidden = true
}else{
tableView.mj_footer.isHidden = false
}
}
4、修改刷新的提示语,这点下拉刷新和上拉加载都适用 ,再说明一下:
这种需要先初始化一个header或footer,再设置settitle方法就好了。
[header setTitle:@"快扯我,快点" forState:MJRefreshStateIdle];
[header setTitle:@"数据要来啦" forState:MJRefreshStatePulling];
[header setTitle:@"服务器正在狂奔 ..." forState:MJRefreshStateRefreshing];
iOS MJ 刷新 一些自定义相关推荐
- IOS 类似抖音下拉刷新与自定义上拉加载
IOS 类似抖音下拉刷新与自定义上拉加载 最近UICollectionView中使用了pageEnabled,MJRresh直接使用时出现偏移.这里就暂时考虑简单的做法. 首先考虑在UICollect ...
- iOS 11 MJ刷新异常,上拉加载出现跳动刷新问题
MJ刷新异常,上拉加载出现跳动刷新问题: 解决办法:初始化的时候增加以下代码(tableView和collectionView类似) if (@available(iOS11.0, *)) {_tab ...
- iOS开发多线程篇—自定义NSOperation
iOS开发多线程篇-自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UI ...
- Android仿IOS解锁密码界面-自定义view系列(6)
Android仿IOS解锁密码界面-自定义view系列 功能简介 主要实现步骤-具体内容看github项目里的代码 xml相关属性设置 Android Studio 代码 Android技术生活交流 ...
- iOS开发那些事--自定义单元格实现
自定义单元格 当苹果公司提供给的单元格样式不能我们的业务需求的时候,我们需要自定义单元格.在iOS 5之前,自定义单元格可以有两种实现方式:代码实现和用xib技术实现.用xib技术实现相对比较简单,创 ...
- Android手机teams,在iOS和Android上自定义Microsoft Teams体验的三种最佳方法
以下是您可以在iOS和Android上自定义Microsoft Teams应用程序以使其成为自己的三种方法 1. 开启黑暗模式,以便iOS和Android上的小组中的消息和其他内容更易于理解和阅读 2 ...
- iOS - UIRefreshControl 刷新数据
前言 NS_CLASS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED @interface UIRefreshControl : UIControl 1.UIRefresh ...
- ios 动画 隐藏tabbar_iOS_自定义转场TabBar的隐藏动画
摘要 实现同iOS 11 App Store Today相似的转场效果.本文尝试解决转场(Transition)过程中TabBar的隐藏(向下滑出屏幕). tabbar_ani_slow.gif 遇到 ...
- iOS开发使用UIKeyInput自定义密码输入框
前言 开发中很多地方都会遇到密码输入,这时候往往需要根据UI设计自定义.这里遵守UIKeyInput,实现协议中的方法,让自定义View可以进行文字输入:再通过func draw(_ rect: CG ...
最新文章
- 简单又好看的按钮,扁平化按钮。
- firefox浏览器不能使用window.close的解决方案
- 通过电机编码器AB相输出确定电机转向
- python利用递归函数实现斐波那契数列_Python递归及斐波那契数列
- Tcpdump 详解
- CF1054D-Changing Array【贪心】
- 《DBNotes: Buffer Pool对于缓冲页的链表式管理》
- pxe安装linux后命令不可用,pxe自动安装linux
- 最新编程语言排名:Python超Java、JS保持领头羊
- 鸿蒙系统即将发布,华为鸿蒙商标获转让
- php+oracle新增数据类型,Oracle 修改某个字段的数据类型三种方式
- java 日期for循环_java for循环的时候增加循环体的长度是不是不太好的?
- 服务器虚拟化的毕业设计,云桌面技术研究与应用毕业设计论文+开题报告+翻译+源码...
- 用户态文件系统fuse学习
- [转载]Oracle监听器安装与设置(2)
- configure/make的shared object参数
- 汇编语言程序设计实验报告
- 联想官方一键关闭Win10Defender、关闭Win10自动更新工具
- 双下划线一粗一细怎么加_word 下划线 一粗一细
- C++ opencv显示fps帧率