1. 程式人生 > >iOS刷新第三方MJRefresh的基本使用

iOS刷新第三方MJRefresh的基本使用

one 查看 idl ava cocoapod arc user use 實例

iOS刷新第三方MJRefresh的基本使用

iOS開發中最好用的刷新第三方框架 MJRefresh

GitHub : https://github.com/CoderMJLee/MJRefresh

UIRefreshControl的介紹

1,UIRefresh是蘋果自帶的刷新控件
2,支持iOS6.0之後的版本
3,一旦被分配到一個UITableViewController,控件的框架是自動管理

UIRefreshControl基本使用

// 刷新中得狀態判斷,只讀屬性,根據狀態可做一些自定義的事情
@property (nonatomic, readonly, getter=isRefreshing) BOOL refreshing;

//實例化對象(裏面有init,UIRefreshControl的初始化)
 UIRefreshControl *control = [[UIRefreshControl alloc] init];

 //設置UIRefreshControl控件的顏色(菊花和文字)
 control.tintColor = [UIColor redColor];

 //添加到tableView中,默認尺寸和位置都已經設置好
 [self.tableView addSubview:control];

 // 下拉刷新文字描述,自定義
 @property (nonatomic, retain) NSAttributedString *attributedTitle

// 開始刷新
- (void)beginRefreshing NS_AVAILABLE_IOS(6_0);

// 結束刷新,在確定獲得想要的加載數據之後調用
- (void)endRefreshing NS_AVAILABLE_IOS(6_0);

MJRefresh的介紹

MJRefresh是繼承於UIView的自定義刷新控件
支持哪些控件的刷新?
UIScrollView、UITableView、UICollectionView、UIWebView
從iOS9之後,用MJRefresh框架的時候使用它的屬性和方法,大部分需要加入mj_ 開頭作為前綴

  • 該框架純ARC,兼容的系統>=iOS6.0、iPhone\iPad橫豎屏

如果使用MJRefresh

cocoapods導入:pod ‘MJRefresh‘ (cocoapods另一篇博客裏面有寫)
手動導入:
將MJRefresh文件夾中的所有文件拽入項目中
導入主頭文件:#import "MJRefresh.h"

#主要是實現上拉刷新和下拉刷新
    //下拉刷新
    self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewTopic)];

    //自動更改透明度
    self.tableView.mj_header.automaticallyChangeAlpha = YES;

    //進入刷新狀態
    [self.tableView.mj_header beginRefreshing];

    //上拉刷新
    self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreTopic)];
    //結束頭部刷新
    [weakSelf.tableView.mj_header endRefreshing];

 //結束尾部刷新
    [weakSelf.tableView.mj_footer endRefreshing];

MJRefresh類結構圖

技術分享
mjv587.png 技術分享
mj87v5.png

具體使用

默認的下拉刷新 - 01

    self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        // 進入刷新狀態後會自動調用這個block
    }];
    //或
    // 設置回調(一旦進入刷新狀態,就調用target的action,也就是調用self的loadNewData方法)
    self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];

    // 馬上進入刷新狀態
    [self.tableView.header beginRefreshing];

[

技術分享
(下拉刷新01-普通)

下拉動畫刷新 - 02

        // 刷新控件的狀態
        typedef NS_ENUM(NSInteger, MJRefreshState) {
        /** 普通閑置狀態 */
        MJRefreshStateIdle = 1,
        /** 松開就可以進行刷新的狀態 */
        MJRefreshStatePulling,
        /** 正在刷新中的狀態 */
        MJRefreshStateRefreshing,
        /** 即將刷新的狀態 */
        MJRefreshStateWillRefresh,
        /** 所有數據加載完畢,沒有更多的數據了 */
        MJRefreshStateNoMoreData
    };

    // 設置回調(一旦進入刷新狀態,就調用target的action,也就是調用self的loadNewData方法)
    MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
    // 設置普通狀態的動畫圖片 (idleImages 是圖片)
    [header setImages:idleImages forState:MJRefreshStateIdle];
    // 設置即將刷新狀態的動畫圖片(一松開就會刷新的狀態)
    [header setImages:pullingImages forState:MJRefreshStatePulling];
    // 設置正在刷新狀態的動畫圖片
    [header setImages:refreshingImages forState:MJRefreshStateRefreshing];
    // 設置header
    self.tableView.mj_header = header;

[

技術分享
(下拉刷新02-動畫圖片)

下拉隱藏的屬性

// 隱藏時間
header.lastUpdatedTimeLabel.hidden = YES;
// 隱藏狀態
header.stateLabel.hidden = YES;

自定義的文字和動畫圖片的設置

#使用上拉刷新和下拉刷新一般都是自定義頭部和尾部的類
例如: 頭部刷新的  
@interface JHHeader : MJRefreshNormalHeader

#在.m文件中設置
/** 初始化設置 */
- (void)prepare
{
    [super prepare];
    //創建UIImageView
    UIImageView *logoView = [[UIImageView alloc] init];
    //添加圖片
    logoView.image = [UIImage imageNamed:@"meinv02"];
    //將該UIImageView添加到當前header中
    [self addSubview:logoView];
    self.logoView = logoView;

    //根據拖拽的情況自動切換透明度
    self.automaticallyChangeAlpha = YES;

    //隱藏時間
    self.lastUpdatedTimeLabel.hidden = YES;

    //設置文字顏色
    self.stateLabel.textColor = [UIColor redColor];
}
/**
 *  擺放子控件
 */

- (void)placeSubviews
{
    [super placeSubviews];

    self.logoView.x = 0;
    self.logoView.width = self.width;
    self.logoView.height = 100;
    self.logoView.y =  -self.logoView.height; 
}

自定義尾部刷新

例:創建一個JHFooter類 繼承於MJRefreshAutoNormalFooter
@interface JHFooter : MJRefreshAutoNormalFooter

#在.m文件中設置
/**  初始化 */
- (void)prepare
{
    [super prepare];

    self.stateLabel.textColor = [UIColor grayColor];
    [self setTitle:@"向上拉加載更多內容喔..." forState:MJRefreshStateIdle];
    [self setTitle:@"正在連接網絡加載中...." forState:MJRefreshStateRefreshing];

    UISwitch *swith = [[UISwitch alloc] init];
    [self addSubview:swith];

    UIImageView *logoView = [[UIImageView alloc] init];
    logoView.image = [UIImage imageNamed:@"meinv02"];
    [self addSubview:logoView];
    self.logoView = logoView;
}

/**
 *  擺放子控件
 */
- (void)placeSubviews
{
    [super placeSubviews];

    self.logoView.x = 0;
    self.logoView.y = self.height;
    self.logoView.width = self.width;
    self.logoView.height = 100;
}

大部分參考自MJRefresh 的 README.md
該框架還有很多強大的功能,詳情可以進入最上面給的github下載地址中查看
給出的這些應該足夠平時的開發,希望多多給建議

this article author : 會跳舞的獅子
iOS

iOS刷新第三方MJRefresh的基本使用