MJRefresh架構使用及說明,mjrefresh架構說明

來源:互聯網
上載者:User

MJRefresh架構使用及說明,mjrefresh架構說明

一. MJRefresh的類解釋.

1.MJRefreshComponent              所有重新整理控制項的基類別.(component: 成分,組件)

2.MJRefreshNormalHeader          預設的下拉重新整理控制項

3.MJRefreshAutoNormalFooter    預設的上拉重新整理控制項                下拉重新整理控制項自適應在頁面內容下面

4.MJRefreshAutoGifFooter          帶動態圖的上拉載入控制項           下拉重新整理控制項自適應在頁面內容下面

5.MJRefreshBackNormalFooter    預設的上拉重新整理控制項                下拉重新整理控制項一直在螢幕底部

6.MJREfreshBackGifFooter          預設的上拉動畫重新整理控制項           下拉重新整理控制項一直在螢幕底部

 

總結: 重新整理控制項分為: header和footer控制項.                        頭部和尾部重新整理控制項

        重新整理控制項分為normal和gif狀態.                               普通狀態和重新整理控制項和gif動態圖的重新整理控制項

        尾部重新整理控制項又分為: auto和back兩個模式                自適應尾部重新整理控制項位置和重新整理控制項位置在底部.

二.各個類中提供的外部方法.

1.MJRefreshComponent

(1) beginRefreshing   // 開始重新整理,進入頁面想要自動重新整理的時候調用.

      isRefreshing        // 是否正在重新整理

      endRefreshing    // 結束重新整理,網路請求結束的時候使用.

(2) MJRefreshState  重新整理控制項的狀態

/** 重新整理控制項的狀態 */typedef NS_ENUM(NSInteger, MJRefreshState) {    /** 普通閑置狀態 */    MJRefreshStateIdle = 1,    /** 鬆開就可以進行重新整理的狀態 */    MJRefreshStatePulling,    /** 正在重新整理中的狀態 */    MJRefreshStateRefreshing,    /** 即將重新整理的狀態 */    MJRefreshStateWillRefresh,    /** 所有資料載入完畢,沒有更多的資料了 */    MJRefreshStateNoMoreData};

(3) automaticallyChangeAlpha 根據拖拽比例自動切換透明度

2.MJRefreshHeader

(1) 

/** 這個key用來儲存上一次下拉重新整理成功的時間 */@property (copy, nonatomic) NSString *lastUpdatedTimeKey;
/** 上一次下拉重新整理成功的時間 */@property (strong, nonatomic, readonly) NSDate *lastUpdatedTime;

(2)

/** 建立header */+ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;/** 建立header */+ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;

3.MJRefreshFooter

(1)

/** 建立footer */+ (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;/** 建立footer */+ (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;

(2) endRefreshingWithNoMoreData  提示沒有更多資料.

     resetNoMoreData 重設沒有更多資料

(3) automaticallyHidden 自動根據有無資料來顯示或者隱藏(有資料就顯示,沒資料就隱藏.預設為NO)

三.具體使用

1. 預設的重新整理方式

頭部重新整理控制項:  MJRefreshNormalHeader

尾部重新整理控制項: MJRefreshAutoNormalFooter

- (UITableView *)tableView{    if (!_tableView)    {        self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];                self.tableView.dataSource = self;        self.tableView.delegate = self;                // 預設的下拉重新整理和上拉載入        self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{                     // 這個地方是網路請求的處理            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{                [self.tableView.mj_header endRefreshing];            });        }];                self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{            // 這個地方是網路請求的處理            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{                [self.tableView.mj_footer endRefreshing];            });        }];    }    return _tableView;}

 

2. 顯示動畫

頭部重新整理控制項:  MJRefreshGifHeader

尾部重新整理控制項: MJRefreshAutoGifFooter / MJRefreshBackGifFooter

- (UITableView *)tableView{    if (!_tableView)    {        self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];                self.tableView.dataSource = self;        self.tableView.delegate = self;                        MJRefreshGifHeader * header = [MJRefreshGifHeader headerWithRefreshingBlock:^{                        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{                [self.tableView.mj_header endRefreshing];            });        }];                NSMutableArray * arrayM = [NSMutableArray arrayWithCapacity:0];        for (int i = 0; i < 30; i ++) {            UIImage * image = [UIImage imageNamed:[NSString stringWithFormat:@"xz_flower_%d",i + 1]];            [arrayM addObject:image];        }                // 設定普通狀態下的動畫圖片  -->  靜止的一張圖片        NSArray * normalImagesArray = @[[UIImage imageNamed:@"xz_flower_1"]];        [header setImages:normalImagesArray forState:MJRefreshStateIdle];                // 設定即將重新整理狀態的動畫圖片        [header setImages:arrayM forState:MJRefreshStatePulling];                // 設定正在重新整理狀態的動畫圖片        [header setImages:arrayM forState:MJRefreshStateRefreshing];                // 設定header        self.tableView.mj_header = header;    }    return _tableView;}

 

3.設定重新整理控制項的時間和狀態的顯示或者隱藏

- (UITableView *)tableView{    if (!_tableView)    {        self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];                self.tableView.dataSource = self;        self.tableView.delegate = self;                MJRefreshGifHeader * header = [MJRefreshGifHeader headerWithRefreshingBlock:^{                        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{                [self.tableView.mj_header endRefreshing];            });        }];                NSMutableArray * arrayM = [NSMutableArray arrayWithCapacity:0];        for (int i = 0; i < 30; i ++) {            UIImage * image = [UIImage imageNamed:[NSString stringWithFormat:@"xz_flower_%d",i + 1]];            [arrayM addObject:image];        }                NSArray * normalImagesArray = @[[UIImage imageNamed:@"xz_flower_1"]];        [header setImages:normalImagesArray forState:MJRefreshStateIdle];                [header setImages:arrayM forState:MJRefreshStatePulling];                [header setImages:arrayM forState:MJRefreshStateRefreshing];                        // 隱藏時間        header.lastUpdatedTimeLabel.hidden = YES;        // 隱藏狀態        header.stateLabel.hidden = YES;                // 設定header        self.tableView.mj_header = header;    }    return _tableView;}

 

4. 自訂重新整理控制項的文字大小和顏色

- (UITableView *)tableView{    if (!_tableView)    {        self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];                self.tableView.dataSource = self;        self.tableView.delegate = self;                MJRefreshNormalHeader * header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{                        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{                                [self.tableView.mj_header endRefreshing];            });        }];                // 設定文字        [header setTitle:@"下拉重新整理" forState:MJRefreshStateIdle];        [header setTitle:@"更新" forState:MJRefreshStatePulling];        [header setTitle:@"Loading..." forState:MJRefreshStateRefreshing];                // 設定字型        header.stateLabel.font = [UIFont systemFontOfSize:15];        header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:12];                // 設定顏色        header.stateLabel.textColor = [UIColor redColor];        header.lastUpdatedTimeLabel.textColor = [UIColor redColor];                [header beginRefreshing];                self.tableView.mj_header = header;    }    return _tableView;}

 

5. 當全部載入完畢的時候,改變尾部重新整理控制項的顯示(不允許再重新整理)

- (UITableView *)tableView{    if (!_tableView)    {        self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];                self.tableView.dataSource = self;        self.tableView.delegate = self;                MJRefreshAutoNormalFooter * footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{                        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{                [self.tableView.mj_footer endRefreshing];                [self.tableView.mj_footer endRefreshingWithNoMoreData];            });        }];        self.tableView.mj_footer = footer;    }    return _tableView;}

 

重設載入完畢

    [self.tableView.mj_footer resetNoMoreData];

 

6.自訂重新整理控制項

繼承 MJRefreshHeader / MJRefreshGifHeader / MJRefreshAutoGifFooter / MJRefreshBackGifFooter / MJRefreshAutoFooter /MJRefreshBackFooter

#import "MJRefreshHeader.h"@interface MCDIYHeader : MJRefreshHeader@end

 

#import "MCDIYHeader.h"@interface MCDIYHeader ()@property (weak, nonatomic) UILabel *label;@property (weak, nonatomic) UISwitch *s;@property (weak, nonatomic) UIImageView *logo;@property (weak, nonatomic) UIActivityIndicatorView *loading;@end@implementation MCDIYHeader#pragma mark - 重寫方法#pragma mark 在這裡做一些初始化配置(比如添加子控制項)- (void)prepare {    [super prepare];        // 設定控制項的高度    self.mj_h = 50;        // 添加label    UILabel *label = [[UILabel alloc] init];    label.textColor = [UIColor colorWithRed:1.0 green:0.5 blue:0.0 alpha:1.0];    label.font = [UIFont boldSystemFontOfSize:16];    label.textAlignment = NSTextAlignmentCenter;    [self addSubview:label];    self.label = label;        // 打醬油的開關    UISwitch *s = [[UISwitch alloc] init];    [self addSubview:s];    self.s = s;        // logo    UIImageView *logo = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Logo"]];    logo.contentMode = UIViewContentModeScaleAspectFit;    [self addSubview:logo];    self.logo = logo;        // loading    UIActivityIndicatorView *loading = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];    [self addSubview:loading];    self.loading = loading;}#pragma mark 在這裡設定子控制項的位置和尺寸- (void)placeSubviews{    [super placeSubviews];        self.label.frame = self.bounds;        self.logo.bounds = CGRectMake(0, 0, self.bounds.size.width, 100);    self.logo.center = CGPointMake(self.mj_w * 0.5, - self.logo.mj_h + 20);        self.loading.center = CGPointMake(self.mj_w - 30, self.mj_h * 0.5);}#pragma mark 監聽scrollView的contentOffset改變- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change{    [super scrollViewContentOffsetDidChange:change];    }#pragma mark 監聽scrollView的contentSize改變- (void)scrollViewContentSizeDidChange:(NSDictionary *)change{    [super scrollViewContentSizeDidChange:change];    }#pragma mark 監聽scrollView的拖拽狀態改變- (void)scrollViewPanStateDidChange:(NSDictionary *)change{    [super scrollViewPanStateDidChange:change];    }#pragma mark 監聽控制項的重新整理狀態- (void)setState:(MJRefreshState)state{    MJRefreshCheckState;        switch (state) {        case MJRefreshStateIdle:            [self.loading stopAnimating];            [self.s setOn:NO animated:YES];            self.label.text = @"趕緊下拉吖(開關是打醬油滴)";            break;        case MJRefreshStatePulling:            [self.loading stopAnimating];            [self.s setOn:YES animated:YES];            self.label.text = @"趕緊放開我吧(開關是打醬油滴)";            break;        case MJRefreshStateRefreshing:            [self.s setOn:YES animated:YES];            self.label.text = @"載入資料中(開關是打醬油滴)";            [self.loading startAnimating];            break;        default:            break;    }}#pragma mark 監聽拖拽比例(控制項被拖出來的比例)- (void)setPullingPercent:(CGFloat)pullingPercent{    [super setPullingPercent:pullingPercent];        // 1.0 0.5 0.0    // 0.5 0.0 0.5    CGFloat red = 1.0 - pullingPercent * 0.5;    CGFloat green = 0.5 - 0.5 * pullingPercent;    CGFloat blue = 0.5 * pullingPercent;    self.label.textColor = [UIColor colorWithRed:red green:green blue:blue alpha:1.0];}@end

 

使用: 

- (UITableView *)tableView{    if (!_tableView)    {        self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];                self.tableView.dataSource = self;        self.tableView.delegate = self;                        // 使用自定的重新整理控制項        self.tableView.mj_header = [MCDIYHeader headerWithRefreshingBlock:^{                       dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{                [self.tableView.mj_header endRefreshing];            });            [self.tableView.mj_header beginRefreshing];        }];    }    return _tableView;}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.