MJRefresh:iOS上最好用的下拉刷新框架

一、MJRefresh是什麼

MJRefresh是一款非常優秀的下拉刷新框架,支持UITableView、UICollectionView、UIWebView、UIScrollView等常見的控制項上使用下拉刷新,功能強大,使用靈活方便。下拉刷新是現代APP開發中常用的功能,通過下拉刷新能夠及時地獲取最新數據,增強用戶體驗,而MJRefresh就是在這個時代背景下生產出來的。

MJRefresh具有很多特點:

1. 下拉刷新和上拉刷新功能全面:不僅支持UITableView和UICollectionView,還支持UIScrollView、UIWebView等

2. 使用簡單:創始人使用block回調方法,傳統的代理方式已經廢棄

3. 擴展性強:具有良好的擴展性,支持自定義控制項,自定義控制項需要繼承MJRefreshStateHeader和MJRefreshAutoFooter。

4. 支持多種刷新動畫效果:提供常用的刷新動畫(gif、圖片、水滴效果、旋轉等)

總之,MJRefresh是一個強大並且易於使用的下拉刷新框架,是iOS開發中不可缺少的工具之一。

二、MJRefresh的使用

1. 基於UITableView使用

在使用UITableView的時候,只需要在UITableView上添加MJRefresh即可。

__weak typeof(self) weakSelf = self;
self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
    // 刷新數據的操作代碼寫在這裡
    [weakSelf.tableView reloadData];
    // 結束刷新
    [weakSelf.tableView.mj_header endRefreshing];
}];

2. 基於UICollectionView使用

在使用UICollectionView的時候,只需要在UICollectionView上添加MJRefresh即可。

__weak typeof(self) weakSelf = self;
self.collectionView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
    // 載入更多數據的操作代碼寫在這裡
    // ...
    // 結束載入更多
    [weakSelf.collectionView.mj_footer endRefreshing];
}];

3. 基於UIScrollView使用

在使用UIScrollView的時候,同樣是添加MJRefresh。

__weak typeof(self) weakSelf = self;
self.scrollView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
    // 刷新數據的操作代碼寫在這裡
    [weakSelf.scrollView reloadData];
    // 結束刷新
    [weakSelf.scrollView.mj_header endRefreshing];
}];

三、MJRefresh的進階使用

1. 自定義刷新控制項

如果你想要一個更炫酷的下拉刷新控制項,可以考慮使用MJRefresh提供的自定義刷新控制項。

比如我們可以自定義一個帶有菊花的下拉刷新控制項:

#import "MJRefreshStateHeader.h"

@interface CustomHeader : MJRefreshStateHeader

@property (nonatomic, strong) UIImageView *logo;
@property (nonatomic, strong) UIActivityIndicatorView *loading;

@end

@implementation CustomHeader

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        self.logo = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yourLogo"]];
        [self addSubview:self.logo];

        self.loading = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
        [self addSubview:self.loading];
    }
    return self;
}

- (void)layoutSubviews {
    [super layoutSubviews];
    self.logo.frame = CGRectMake(self.bounds.size.width/2.0-50, 20, 100, 30);
    self.loading.center = CGPointMake(self.bounds.size.width/2.0, 70);
}

- (void)setState:(MJRefreshState)state {
    [super setState:state];
    switch (state) {
        case MJRefreshStateIdle:
            self.loading.hidden = YES;
            [self.loading stopAnimating];
            break;
        case MJRefreshStatePulling:
            self.loading.hidden = YES;
            [self.loading stopAnimating];
            break;
        case MJRefreshStateRefreshing:
            self.loading.hidden = NO;
            [self.loading startAnimating];
            break;
        case MJRefreshStateWillRefresh:

            break;
        case MJRefreshStateNoMoreData:

            break;
    }
}

@end

使用這個自定義刷新控制項只需要在初始化MJRefreshHeader時賦值即可:

self.tableView.mj_header = [CustomHeader headerWithRefreshingBlock:^{
    [weakSelf.tableView reloadData];
    [weakSelf.tableView.mj_header endRefreshing];
}];

2. 載入更多酷炫的動畫:

還可以使用MJRefresh提供的多種刷新動畫效果,使應用更加酷炫的效果,比如下面這個gif圖:

這個gif效果使用步驟如下:

// 1. 初始化
MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 2. 設置動畫圖片
NSMutableArray *idleImages = [NSMutableArray array];
for (NSUInteger i = 1; i<=60; i++) {
    UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dropdown_anim__000%zd", i]];
    [idleImages addObject:image];
}
[header setImages:idleImages forState:MJRefreshStateIdle];
[header setImages:idleImages forState:MJRefreshStatePulling];
[header setImages:idleImages duration:1 forState:MJRefreshStateRefreshing];
// 3. 設置header
self.tableView.mj_header = header;

3. 自定義上拉載入更多的文字

在MjRefresh中可以定製上拉載入更多的文字,只需要在初始化MJRefreshAutoFooter時設置即可:

MJRefreshAutoNormalFooter *footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
    // 載入更多數據的操作代碼寫在這裡
    // ...
    // 結束載入更多
    [weakSelf.collectionView.mj_footer endRefreshing];
}];
[footer setTitle:@"載入中..." forState:MJRefreshStateRefreshing];
[footer setTitle:@"鬆開載入更多" forState:MJRefreshStatePulling];
[footer setTitle:@"沒有更多數據了" forState:MJRefreshStateNoMoreData];
self.collectionView.mj_footer = footer;

四、小結

MJRefresh是一款非常好用的下拉刷新框架,本文對其進行了詳細的介紹。通過本文,我們可以了解到MJRefresh的基本使用方法,還學習了如何使用自定義下拉刷新控制項、自定義上拉載入更多的文字、如何實現更多令人印象深刻的刷新動畫。總之,MJRefresh是我們在iOS下拉刷新中不可缺少的一個工具。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/200326.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-05 14:05
下一篇 2024-12-05 14:05

相關推薦

  • Ojlat:一款快速開發Web應用程序的框架

    Ojlat是一款用於快速開發Web應用程序的框架。它的主要特點是高效、易用、可擴展且功能齊全。通過Ojlat,開發人員可以輕鬆地構建出高質量的Web應用程序。本文將從多個方面對Oj…

    編程 2025-04-29
  • Zlios——一個多功能的開發框架

    你是否在開發過程中常常遇到同樣的問題,需要不斷去尋找解決方案?你是否想要一個多功能、易於使用的開發框架來解決這些問題?那麼,Zlios就是你需要的框架。 一、簡介 Zlios是一個…

    編程 2025-04-29
  • agavi開發框架

    Agavi是一個基於MVC模式的Web應用程序開發框架,以REST和面向資源的設計為核心思想。本文章將從Agavi的概念、優點、使用方法和實例等方面進行詳細介紹。 一、概念 Aga…

    編程 2025-04-29
  • Python unittest框架用法介紹

    Python unittest框架是Python自帶的一種測試框架,可以用來編寫並運行測試用例。在本文中,我們將從以下幾個方面詳細介紹Python unittest框架的使用方法和…

    編程 2025-04-29
  • com.alipay.sofa.bolt框架

    com.alipay.sofa.bolt框架是一款高性能、輕量級、可擴展的RPC框架。其廣泛被應用於阿里集團內部服務以及阿里雲上的服務。該框架通過NIO支持高並發,同時還內置了多種…

    編程 2025-04-29
  • Django框架:從簡介到項目實戰

    本文將從Django的介紹,以及如何搭建Django環境開始,逐步深入到Django模型、視圖、模板、表單,最後通過一個小型項目實戰,進行綜合性的應用,讓讀者獲得更深入的學習。 一…

    編程 2025-04-28
  • LuaEP:一款強大的Lua開發框架

    LuaEP是一個集成了可以快速開發web應用程序所需的組件的Lua開發框架。它以Lua語言為基礎,提供了許多常用介面和庫,使得開發者不需要從頭開始編寫web應用程序,而是專註於業務…

    編程 2025-04-28
  • Java持久層框架的複合主鍵實現

    用Java持久層框架來操作資料庫時,複合主鍵是常見的需求。這篇文章將詳細闡述javax.persistence複合主鍵的實現方式,並提供完整的示例代碼。 一、複合主鍵的定義 複合主…

    編程 2025-04-27
  • iOS開發如何添加許可權

    在iOS開發中,為了保護用戶的隱私和安全,應用程序可能需要請求一些許可權。 一、請求應用程序許可權 應用程序不得在用戶未給予許可的情況下獲取用戶數據。許多iOS系統功能都需要獲得用戶的…

    編程 2025-04-27
  • AMTVV:一個全能的開發框架

    AMTVV是一個面向現代Web應用程序的全能開發框架,它可以讓你的工作更加高效。AMTVV能夠處理各種各樣的技術棧,包括但不限於React、Angular、Vue和TypeScri…

    編程 2025-04-27

發表回復

登錄後才能評論