框架結(jié)構(gòu)
1.框架結(jié)構(gòu)圖
image.png
2.MJRefresh的框架圖梳理
類 | 作用 |
---|---|
MJRefreshComponent | 繼承自UIView贬丛,最基本的刷新類 |
MJRefreshHeader | 最基本的下拉刷新類 |
MJRefreshStateHeader | 可以下拉刷新,但是只有文字 |
MJRefreshNormalHeader | 默認(rèn)的刷新樣式氧猬,有文字壁涎,有上下箭頭,有菊花 |
對于使用下拉刷新的問題是一定要自定義控件的,畢竟各個App的風(fēng)格截然不同
使用說明
1.MJRefresh默認(rèn)的下拉刷新和上拉加載
使用@selector
的方式
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//默認(rèn)【下拉刷新】
self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(refresh)];
//默認(rèn)【上拉加載】
self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMore)];
}
- (void)refresh {
[self getNetworkData:YES];
}
- (void)loadMore {
[self getNetworkData:NO];
}
使用block
的方式
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
__weak typeof(self) weakSelf = self;
//默認(rèn)block方法:設(shè)置下拉刷新
self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
[weakSelf getNetworkData:YES];
}];
//默認(rèn)block方法:設(shè)置上拉加載更多
self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
//Call this Block When enter the refresh status automatically
[weakSelf getNetworkData:NO];
}];
}
自定義下拉刷新和上拉加載
1.動畫圖片樣式山林;
2.隱藏刷新控件狀態(tài)或者時間樣式房待;
3.自定義刷新狀態(tài)和刷新時間文字樣式
- (void)viewDidLoad {
[super viewDidLoad];
//樣式一:設(shè)置一張圖片(無動畫效果)
// NSArray *idleImages = [NSArray arrayWithObject:[UIImage imageNamed:@"xiala_icon.png"]];
//樣式二:設(shè)置多張圖片(有動畫效果)
NSArray *idleImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"dropdown_loading_01.png"],
[UIImage imageNamed:@"dropdown_loading_02.png"],
[UIImage imageNamed:@"dropdown_loading_03.png"],nil];
NSArray *pullingImages = [NSArray arrayWithObject:[UIImage imageNamed:@"shifang_icon.png"]];
NSArray *refreshingImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"load_view_01.png"],
[UIImage imageNamed:@"load_view_02.png"],
[UIImage imageNamed:@"load_view_03.png"],
[UIImage imageNamed:@"load_view_04.png"],
[UIImage imageNamed:@"load_view_05.png"],
[UIImage imageNamed:@"load_view_06.png"],
[UIImage imageNamed:@"load_view_07.png"],
[UIImage imageNamed:@"load_view_08.png"],
[UIImage imageNamed:@"load_view_09.png"],
[UIImage imageNamed:@"load_view_010.png"], nil];
// MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(animationRefresh)];
//-------以下是使用block方法【不包含animationRefresh方法】,動畫設(shè)置在上面的部分代碼---------
__weak typeof(self) weakSelf = self;
MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingBlock:^{
[weakSelf getNetworkData:YES];
}];
//-------以上是使用block方法【不包含animationRefresh方法】,動畫設(shè)置在上面的部分代碼---------
//1.設(shè)置普通狀態(tài)的動畫圖片
[header setImages:idleImages forState:MJRefreshStateIdle];
//2.設(shè)置即將刷新狀態(tài)的動畫圖片(一松開就會刷新的狀態(tài))
[header setImages:pullingImages forState:MJRefreshStatePulling];
//3.設(shè)置正在刷新狀態(tài)的動畫圖片
[header setImages:refreshingImages forState:MJRefreshStateRefreshing];
self.tableView.mj_header = header;
#pragma mark --- 下面兩個設(shè)置根據(jù)各自需求設(shè)置
// // 隱藏更新時間
// header.lastUpdatedTimeLabel.hidden = YES;
//
// // 隱藏刷新狀態(tài)
// header.stateLabel.hidden = YES;
#pragma mark --- 自定義刷新狀態(tài)和刷新時間文字【當(dāng)然了,對應(yīng)的Label不能隱藏】
// Set title
[header setTitle:@"Pull down to refresh" forState:MJRefreshStateIdle];
[header setTitle:@"Release to refresh" forState:MJRefreshStatePulling];
[header setTitle:@"Loading ..." forState:MJRefreshStateRefreshing];
// Set font
header.stateLabel.font = [UIFont systemFontOfSize:15];
header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:14];
// Set textColor
header.stateLabel.textColor = [UIColor redColor];
header.lastUpdatedTimeLabel.textColor = [UIColor blueColor];
}
#pragma mark --- "動畫圖片"樣式的非block方法
-(void)animationRefresh
{
[self getNetworkData:YES];
}
完全自定義的下拉刷新和上拉加載
- 首先創(chuàng)建一個類(譬如MJDIYHeader)驼抹,繼承自MJRefreshHeader桑孩;
- 重寫相關(guān)方法 【 在MJRefreshComponent.h中有下面的提示】
#pragma mark - 交給子類們?nèi)?shí)現(xiàn)
/** 初始化 */
#pragma mark 在這里做一些初始化配置(比如添加子控件)
-(void)prepare NS_REQUIRES_SUPER;
/** 擺放子控件frame */
#pragma mark 在這里設(shè)置子控件的位置和尺寸
-(void)placeSubviews NS_REQUIRES_SUPER;
/** 當(dāng)scrollView的contentOffset發(fā)生改變的時候調(diào)用 */
-(void)scrollViewContentOffsetDidChange:(NSDictionary *)change NS_REQUIRES_SUPER;
/** 當(dāng)scrollView的contentSize發(fā)生改變的時候調(diào)用 */
-(void)scrollViewContentSizeDidChange:(NSDictionary *)change NS_REQUIRES_SUPER;
/** 當(dāng)scrollView的拖拽狀態(tài)發(fā)生改變的時候調(diào)用 */
-(void)scrollViewPanStateDidChange:(NSDictionary *)change NS_REQUIRES_SUPER;