iOS開發(fā)中最好用的刷新第三方框架 MJRefresh
GitHub : https://github.com/CoderMJLee/MJRefresh
UIRefreshControl的介紹
1,UIRefresh是蘋果自帶的刷新控件
2,支持iOS6.0之后的版本
3,一旦被分配到一個UITableViewController梅屉,控件的框架是自動管理
UIRefreshControl基本使用
// 刷新中得狀態(tài)判斷,只讀屬性,根據(jù)狀態(tài)可做一些自定義的事情
@property (nonatomic, readonly, getter=isRefreshing) BOOL refreshing;
//實例化對象(里面有init,UIRefreshControl的初始化)
UIRefreshControl *control = [[UIRefreshControl alloc] init];
//設(shè)置UIRefreshControl控件的顏色(菊花和文字)
control.tintColor = [UIColor redColor];
//添加到tableView中,默認尺寸和位置都已經(jīng)設(shè)置好
[self.tableView addSubview:control];
// 下拉刷新文字描述,自定義
@property (nonatomic, retain) NSAttributedString *attributedTitle
// 開始刷新
- (void)beginRefreshing NS_AVAILABLE_IOS(6_0);
// 結(jié)束刷新,在確定獲得想要的加載數(shù)據(jù)之后調(diào)用
- (void)endRefreshing NS_AVAILABLE_IOS(6_0);
MJRefresh的介紹
MJRefresh是繼承于UIView的自定義刷新控件
支持哪些控件的刷新?
UIScrollView散吵、UITableView、UICollectionView、UIWebView
從iOS9之后,用MJRefresh框架的時候使用它的屬性和方法,大部分需要加入mj_ 開頭作為前綴
- 該框架純ARC蓬衡,兼容的系統(tǒng)>=iOS6.0喻杈、iPhone\iPad橫豎屏
如果使用MJRefresh
cocoapods導(dǎo)入:pod 'MJRefresh' (cocoapods另一篇博客里面有寫)
手動導(dǎo)入:
將MJRefresh文件夾中的所有文件拽入項目中
導(dǎo)入主頭文件:#import "MJRefresh.h"
#主要是實現(xiàn)上拉刷新和下拉刷新
//下拉刷新
self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewTopic)];
//自動更改透明度
self.tableView.mj_header.automaticallyChangeAlpha = YES;
//進入刷新狀態(tài)
[self.tableView.mj_header beginRefreshing];
//上拉刷新
self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreTopic)];
//結(jié)束頭部刷新
[weakSelf.tableView.mj_header endRefreshing];
//結(jié)束尾部刷新
[weakSelf.tableView.mj_footer endRefreshing];
MJRefresh類結(jié)構(gòu)圖
具體使用
默認的下拉刷新 - 01
self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
// 進入刷新狀態(tài)后會自動調(diào)用這個block
}];
//或
// 設(shè)置回調(diào)(一旦進入刷新狀態(tài),就調(diào)用target的action狰晚,也就是調(diào)用self的loadNewData方法)
self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 馬上進入刷新狀態(tài)
[self.tableView.header beginRefreshing];
[下拉動畫刷新 - 02
// 刷新控件的狀態(tài)
typedef NS_ENUM(NSInteger, MJRefreshState) {
/** 普通閑置狀態(tài) */
MJRefreshStateIdle = 1,
/** 松開就可以進行刷新的狀態(tài) */
MJRefreshStatePulling,
/** 正在刷新中的狀態(tài) */
MJRefreshStateRefreshing,
/** 即將刷新的狀態(tài) */
MJRefreshStateWillRefresh,
/** 所有數(shù)據(jù)加載完畢筒饰,沒有更多的數(shù)據(jù)了 */
MJRefreshStateNoMoreData
};
// 設(shè)置回調(diào)(一旦進入刷新狀態(tài),就調(diào)用target的action壁晒,也就是調(diào)用self的loadNewData方法)
MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 設(shè)置普通狀態(tài)的動畫圖片 (idleImages 是圖片)
[header setImages:idleImages forState:MJRefreshStateIdle];
// 設(shè)置即將刷新狀態(tài)的動畫圖片(一松開就會刷新的狀態(tài))
[header setImages:pullingImages forState:MJRefreshStatePulling];
// 設(shè)置正在刷新狀態(tài)的動畫圖片
[header setImages:refreshingImages forState:MJRefreshStateRefreshing];
// 設(shè)置header
self.tableView.mj_header = header;
[下拉隱藏的屬性
// 隱藏時間
header.lastUpdatedTimeLabel.hidden = YES;
// 隱藏狀態(tài)
header.stateLabel.hidden = YES;
自定義的文字和動畫圖片的設(shè)置
#使用上拉刷新和下拉刷新一般都是自定義頭部和尾部的類
例如: 頭部刷新的
@interface JHHeader : MJRefreshNormalHeader
#在.m文件中設(shè)置
/** 初始化設(shè)置 */
- (void)prepare
{
[super prepare];
//創(chuàng)建UIImageView
UIImageView *logoView = [[UIImageView alloc] init];
//添加圖片
logoView.image = [UIImage imageNamed:@"meinv02"];
//將該UIImageView添加到當前header中
[self addSubview:logoView];
self.logoView = logoView;
//根據(jù)拖拽的情況自動切換透明度
self.automaticallyChangeAlpha = YES;
//隱藏時間
self.lastUpdatedTimeLabel.hidden = YES;
//設(shè)置文字顏色
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;
}
自定義尾部刷新
例:創(chuàng)建一個JHFooter類 繼承于MJRefreshAutoNormalFooter
@interface JHFooter : MJRefreshAutoNormalFooter
#在.m文件中設(shè)置
/** 初始化 */
- (void)prepare
{
[super prepare];
self.stateLabel.textColor = [UIColor grayColor];
[self setTitle:@"向上拉加載更多內(nèi)容喔..." forState:MJRefreshStateIdle];
[self setTitle:@"正在連接網(wǎng)絡(luò)加載中...." 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下載地址中查看
給出的這些應(yīng)該足夠平時的開發(fā),希望多多給建議
this article author : 會跳舞的獅子