分享

iOS MJRefresh下拉刷新 上拉加载(可添加gif图版) 小结

 没原创_去搜索 2015-09-16


================================


1.首先去github上下载最新版 MJ刷新库 下载MJ链接

 

 

2.tableVIew中加入相关代码

_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, MCAPPWidth, MCAPPHeight - 64)];

_tableView.backgroundColor = myClearColor;

_tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

_tableView.delegate = self;

_tableView.dataSource = self;

_tableView.showsVerticalScrollIndicator = NO;

_tableView.scrollsToTop = YES;

[self.view addSubview:_tableView];

[_tableView addGifHeaderWithRefreshingTarget:self refreshingAction:@selector(loadData)];

[_tableView addGifFooterWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];

[self gif];

 

//loadData 为你下拉刷新时请求网络数据的方法 loadMoreData为你上拉加载时请求网络数据的方法

 

 

3. [self gif]

 

- (void)gif

{

NSMutableArray *idleImages = [NSMutableArray array];

//这块为你刷新时出现的gif图 需要循环添加到数组中

for (NSUInteger i = 1; i <= 5; i++) {

UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@img_loading-%lu.png, (unsigned long)i]];

[idleImages addObject:image];

}

[_tableView.gifHeader setImages:idleImages forState:MJRefreshHeaderStateIdle];

_tableView.gifFooter.refreshingImages = idleImages;

_tableView.gifHeader.updatedTimeHidden = YES;

// 设置即将刷新状态的动画图片(一松开就会刷新的状态)

NSMutableArray *refreshingImages = [NSMutableArray array];

for (NSUInteger i = 1; i <= 5; i++) {

UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@img_loading-%lu.png, (unsigned long)i]];

[refreshingImages addObject:image];

}

[_tableView.gifHeader setImages:refreshingImages forState:MJRefreshHeaderStatePulling];

}

 

 

4. 自定义刷新时顶部底部出现的Label和gif图的frame 这里举footer的例子

MJRefreshGifFooter.m

- (void)layoutSubviews

{

[super layoutSubviews];

// 指示器 gif图的frame

self.gifView.frame = CGRectMake(self.bounds.origin.x + 20, self.bounds.origin.y + 15, self.bounds.size.width / 2, self.bounds.size.height / 2);

 

if (self.stateHidden) {

self.gifView.contentMode = UIViewContentModeCenter;

} else {

self.gifView.contentMode = UIViewContentModeScaleAspectFit;

self.gifView.mj_w = self.mj_w * 0.5 - 90;

}

}

MJRefreshFooter.m

- (void)layoutSubviews

{

[super layoutSubviews];

self.loadMoreButton.frame = self.bounds;

self.loadMoreButton.hidden = YES;

//Label的frame

self.stateLabel.frame = CGRectMake(self.bounds.origin.x, self.bounds.origin.y + 15, self.bounds.size.width, self.bounds.size.height / 2);

self.noMoreLabel.frame = self.bounds;

}

 

同理header的gif图frame 和Labelframe 都在相应的类里的方法里 都可以根据需求去修改

 

更多的设置可以看下MJ在github上相关的文档。




================================



MJRefresh类结构图

  • 图中红色文字的类:可以直接拿来用
    • 下拉刷新控件的种类
      • 默认(Normal):MJRefreshNormalHeader
      • 动图(Gif):MJRefreshGifHeader
    • 上拉刷新控件的种类
      • 自动刷新(Auto)
        • 默认(Normal):MJRefreshAutoNormalFooter
        • 动图(Gif):MJRefreshAutoGifFooter
      • 自动回弹(Back)
        • 默认(Normal):MJRefreshBackNormalFooter
        • 动图(Gif):MJRefreshBackGifFooter
  • 图中非红色文字的类:拿来继承,用于自定义刷新控件
  • 关于如何自定义刷新控件,可以参考下图的类

下拉刷新01-默认

self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
   // 进入刷新状态后会自动调用这个block
}];
或
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];

// 马上进入刷新状态
[self.tableView.header beginRefreshing];

下拉刷新02-动画图片

// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 设置普通状态的动画图片
[header setImages:idleImages forState:MJRefreshStateIdle];
// 设置即将刷新状态的动画图片(一松开就会刷新的状态)
[header setImages:pullingImages forState:MJRefreshStatePulling];
// 设置正在刷新状态的动画图片
[header setImages:refreshingImages forState:MJRefreshStateRefreshing];
// 设置header
self.tableView.header = header;

下拉刷新03-隐藏时间

// 隐藏时间
header.lastUpdatedTimeLabel.hidden = YES;

下拉刷新04-隐藏状态和时间

// 隐藏时间
header.lastUpdatedTimeLabel.hidden = YES;

// 隐藏状态
header.stateLabel.hidden = YES;

下拉刷新05-自定义文字

// 设置文字
[header setTitle:@"Pull down to refresh" forState:MJRefreshStateIdle];
[header setTitle:@"Release to refresh" forState:MJRefreshStatePulling];
[header setTitle:@"Loading ..." forState:MJRefreshStateRefreshing];

// 设置字体
header.stateLabel.font = [UIFont systemFontOfSize:15];
header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:14];

// 设置颜色
header.stateLabel.textColor = [UIColor redColor];
header.lastUpdatedTimeLabel.textColor = [UIColor blueColor];

下拉刷新06-自定义刷新控件

self.tableView.header = [MJDIYHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 具体实现参考MJDIYHeader.h和MJDIYHeader.m

上拉刷新01-默认

self.tableView.footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
   // 进入刷新状态后会自动调用这个block
}];
或
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
self.tableView.footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];

上拉刷新02-动画图片

// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
MJRefreshAutoGifFooter *footer = [MJRefreshAutoGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];

// 设置刷新图片
[footer setImages:refreshingImages forState:MJRefreshStateRefreshing];

// 设置尾部
self.tableView.footer = footer;

原文地址:https://github.com/CoderMJLee/MJRefresh






    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多