MJRefresh 3.1.10
最近更新了一下pod 发现MJ方法 以前的都不能用了 哎呀卧槽 这可咋办。
赶紧找找攻略 发现都比较老了没有一个比较新的
索性下载官方demo 自己研究一下吧
官方链接 MJ_git 点我就对了
好了 废话不说 开始pod MJ吧
本文主要讲的是 Mj3.1.10版本 基础使用方法
一 初始化上拉刷新,下拉加载 (最基础方法 需要更深层次的请往下看)
上拉刷新
// 马上进入刷新状态
[self.tableView.mj_header beginRefreshing];
这个方法一般可以写在 -(void)viewWillAppear:(BOOL)animated 里面
下面是初始化
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
[self loadNewData]; //这不用说了吧 这就是上拉刷新时候走的方法
}];
}
#pragma mark 下拉刷新数据
- (void)loadNewData
{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(MJDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 刷新表格
[tableView reloadData];
// 拿到当前的下拉刷新控件,结束刷新状态
[tableView.mj_header endRefreshing];
});
}
这事最基本的方法 也就是 刷新的时候 显示刷新文字 时间
下拉加载
[self.GatoTableview.mj_footer resetNoMoreData];
切记 下拉加载的初始化跟刷新可不一样 不要搞混了 不然会出现 下拉刷新 一直刷新不能停止的状况
下面是初始化
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
[self loadMoreData];
}];
}
#pragma mark 上拉加载数据
- (void)loadMoreData
{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(MJDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 刷新表格
[tableView reloadData];
// 拿到当前的上拉刷新控件,结束刷新状态
[tableView.mj_footer endRefreshing];
});
}
好了 基础的使用 到这里就结束了
下面开始说一些常用状态
(1)上拉加载的时候 如果数据加载完 想让提示语变成 “已经全部加载完毕”
就需要在 上拉加载里面判断 当没有更多数据的时候
[self.GatoTableview.mj_footer endRefreshingWithNoMoreData];
(2)需要自定义刷新显示问题 图片 之类的
那就不能用MJ自带的初始化方法
- (void)viewDidLoad {
[super viewDidLoad];
MJChiBaoZiHeader *header = [MJChiBaoZiHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 隐藏时间
header.lastUpdatedTimeLabel.hidden = YES;
// 隐藏状态
header.stateLabel.hidden = YES;
// 马上进入刷新状态
[header beginRefreshing];
// 设置header
self.tableView.mj_header = header;
//---------------------------------------------------------------------------------------------------------------
MJChiBaoZiFooter *footer = [MJChiBaoZiFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// 当上拉刷新控件出现50%时(出现一半),就会自动刷新。这个值默认是1.0(也就是上拉刷新100%出现时,才会自动刷新)
// footer.triggerAutomaticallyRefreshPercent = 0.5;
// 隐藏刷新状态的文字
footer.refreshingTitleHidden = YES;
// 设置footer
self.tableView.mj_footer = footer;
}
看到下方的小脑袋了没? 就是 只有小脑袋没有图片
当然 也可以有图片有文字 方法如下
- (void)viewDidLoad {
[super viewDidLoad];
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
self.tableView.mj_header = [MJChiBaoZiHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 马上进入刷新状态
[self.tableView.mj_header beginRefreshing];
//---------------------------------------------------------------------------------------------------------------
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
self.tableView.mj_footer = [MJChiBaoZiFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
}
(3)下面 就说一下 大家最关心的 也是最常用的 自定义加载文字 (虽然我比较懒得改)
- (void)viewDidLoad {
[super viewDidLoad];
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 设置文字
[header setTitle:@"未下拉时候显示的文字" forState:MJRefreshStateIdle];
[header setTitle:@"下拉以后 没松开时候显示的文字" forState:MJRefreshStatePulling];
[header setTitle:@"松开以后 刷新时候显示的文字" forState:MJRefreshStateRefreshing];
// 设置字体
header.stateLabel.font = [UIFont systemFontOfSize:15];
header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:14];
// 设置颜色
header.stateLabel.textColor = [UIColor redColor];
header.lastUpdatedTimeLabel.textColor = [UIColor blueColor];
// 马上进入刷新状态
[header beginRefreshing];
// 设置刷新控件
self.tableView.mj_header = header;
// 添加默认的上拉刷新
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
MJRefreshAutoNormalFooter *footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// 设置文字
[footer setTitle:@"为刷新时候显示的文字" forState:MJRefreshStateIdle];
[footer setTitle:@"正在刷新时候显示的文字." forState:MJRefreshStateRefreshing];
[footer setTitle:@"没有更多数据时候显示的文字" forState:MJRefreshStateNoMoreData];
// 设置字体
footer.stateLabel.font = [UIFont systemFontOfSize:17];
// 设置颜色
footer.stateLabel.textColor = [UIColor blueColor];
// 设置footer
self.tableView.mj_footer = footer;
}
(4)一般情况下 上拉加载的文字 都是紧贴着数据的 某些时候我们需要他永远在页面最下方 应该怎么办呢?
- (void)viewDidLoad {
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// 设置了底部inset
self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 30, 0);
// 忽略掉底部inset
self.tableView.mj_footer.ignoredScrollViewContentInsetBottom = 30;
}
只要这样初始化就能达到效果了
不知道大家发现了没有
用了这么多不同的自定义 其实 所有的自定义都是在初始化的时候进行更改 而不管怎么更改 实用的方法都是相同呢?
好了 常用的基础方法 已经介绍完毕了
如果大家有什么好的想法或者问题 欢迎随时留言联系我