MJRefresh

对上拉刷新, 下拉加载, 进行封装, 包括2种 :
(一) 自定义静态 上拉刷新, 下拉加载封装
写一个类, 继承自 MJRefreshNormalHeader

@implementation RefreshHeader

/* 初始化 */
- (void)prepare
{
    [super prepare];
    self.automaticallyChangeAlpha = YES;
    self.lastUpdatedTimeLabel.textColor = [UIColor orangeColor];
    self.stateLabel.textColor = [UIColor orangeColor];
    [self setTitle:@"赶紧下拉吧" forState:MJRefreshStateIdle]; //setValue 方法, 根据不同状态设置不同的文字
    [self setTitle:@"赶紧松开吧" forState:MJRefreshStatePulling];
    [self setTitle:@"正在加载数据..." forState:MJRefreshStateRefreshing];
    //    self.lastUpdatedTimeLabel.hidden = YES;
    //    self.stateLabel.hidden = YES;
     [self addSubview:[[UISwitch alloc] init]];
   
    UIImageView *logo = [[UIImageView alloc] init];
    logo.image = [UIImage imageNamed:@"bd_logo1"];
    [self addSubview:logo];
    self.logo = logo;
}

/**
 *  摆放子控件 : 加一个公司的图片Logo
 */
- (void)placeSubviews
{
    [super placeSubviews];
   
    self.logo.xmg_width = self.xmg_width;
    self.logo.xmg_height = 50;
    self.logo.xmg_x = 0;
    self.logo.xmg_y = - 50;
}
@end

在ViewController中, 设置 tableView 的 mj_headermj_footer

- (void)setupRefresh
{ self.tableView.mj_header = [RefreshHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 一进来就刷新
[self.tableView.mj_header beginRefreshing];
   
// 尾视图的
 self.tableView.mj_footer = [RefreshFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
}

#pragma mark - 加载新数据
- (void)loadNewData{
}
#pragma mark - 加载更多数据
- (void)loadMoreData{
}

注意 : 在加载完数据或者网络请求失败的时候, 需要结束刷新

结束下拉刷新

[self.tableView.mj_header endRefreshing];

结束上拉加载

[self.tableView.mj_footer endRefreshing];
自定义静态刷新控件

(二) 自定义 动态 的上拉刷新, 下拉加载封装
自定义上拉加载控件, 写一个类, 继承自 MJRefreshBackGifFooter

#import "RefreshFooter.h"

@interface RefreshFooter ()
@property (nonatomic, strong) NSMutableArray *footerArr1;
@property (nonatomic, strong) NSMutableArray *footerArr2;
@end

@implementation RefreshFooter

- (void)prepare {
    [super prepare];

    self.stateLabel.hidden = YES;
    for (int i = 6; i >= 1; i--) {
        NSString *imageName = [NSString stringWithFormat:@"刷新%d",i];
        UIImage *image = [UIImage imageNamed:imageName];
        [self.footerArr1 addObject:image];
    }
    
    for (int i  = 1; i<= 8; i++) {
        NSString *iamgeName = [NSString stringWithFormat:@"loading%d",i];
        UIImage *image = [UIImage imageNamed:iamgeName];
        [self.footerArr2 addObject:image];
    }

    [self setImages:self.footerArr1 forState:MJRefreshStateIdle];
    [self setImages:self.footerArr2 forState:MJRefreshStatePulling];
    [self setImages:self.footerArr2 forState:MJRefreshStateRefreshing];
}
- (NSMutableArray *)footerArr1 {
    
    if (_footerArr1 == nil) {
        _footerArr1 = [NSMutableArray new];
    }
    return _footerArr1;
}
- (NSMutableArray *)footerArr2 {
    if (_footerArr2 == nil) {
        _footerArr2 = [NSMutableArray new];
    }
    return _footerArr2;
}
@end

在BaseViewController 中, 需要封装一个setRefrshMJFooterView方法, 让子类直接调用父类的方法即可 [或者这2部分, 合并成一部分, 如上, 写在需要刷新控件的ViewController中]

/**
 *  设置刷新尾
 *  @return
 */
- (RefreshFooter *)setRefrshMJFooterView;
- (RefreshFooter *)setRefrshMJFooterView {
    
    RefreshFooter *footer = [RefreshFooter footerWithRefreshingTarget:self refreshingAction:@selector(LoadMoreDate)];
    return footer;
}

在子类ViewController中, 调用上面的方法

 self.tableView.mj_header = [self setRefrshMJHeaderView];
 self.tableView.mj_footer = [self setRefrshMJFooterView];
 [self.tableView.mj_header beginRefreshing];//设置进入页面,自动刷新

注意 : 过程中, 在 [self setRefrshMJHeaderView] 的时候, 出现了⚠️, 是因为 没有正确引用 自定义类的头文件

自定义动态的刷新控件.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,132评论 25 709
  • MJRefresh是李明杰老师的作品,到现在已经有9800多颗star了,是一个简单实用,功能强大的iOS下拉刷新...
    Style_mao阅读 3,890评论 1 2
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,195评论 4 61
  • 初夏傍晚微凉的空气 经过车窗缓缓吹来 那是混合着泥土于各种草木气息的 寂静的小微风 晃晃荡荡地系在前排座位上的阳光...
    Joyce的漫长告别阅读 3,490评论 0 2
  • 闲来无事的时候重新读了读《西游记》。 自从孙悟空等人在火云洞把红孩儿降服了,让他跟着观音菩萨做了善财童子后,这段仇...
    安然呐阅读 5,016评论 0 0