MJRefresh
下拉刷新控件目前比較火的有好幾種友瘤,此前用過MJRefresh 和 SVPullToRefresh,相對而言仰禀,還是覺得 MJRefresh 更好用浑劳!因此抽了些時(shí)間整理了 MJRefresh 的用法。以下是文章內(nèi)容琐馆。规阀。。
【文章目錄】
一瘦麸、類結(jié)構(gòu)圖
- MJRefreshComponent.h
- MJRefreshHeader.h
- MJRefreshFooter.h
- MJRefreshAutoFooter.h
二谁撼、參考例子
- 下拉刷新01-默認(rèn)
- 下拉刷新02-動畫圖片
- 下拉刷新03-隱藏時(shí)間
- 下拉刷新04-隱藏狀態(tài)和時(shí)間
- 下拉刷新05-自定義文字
- 下拉刷新06-自定義刷新控件
- 上拉刷新01-默認(rèn)
- 上拉刷新02-動畫圖片
- 上拉刷新03-隱藏刷新狀態(tài)的文字
- 上拉刷新04-全部加載完畢
- 上拉刷新05-自定義文字
- 上拉刷新06-加載后隱藏
- 上拉刷新07-自動回彈的上拉01
- 上拉刷新08-自動回彈的上拉02
- 上拉刷新09-自定義刷新控件(自動刷新)
- 上拉刷新10-自定義刷新控件(自動回彈)
- UICollectionView01-上下拉刷新
- UIWebView01-下拉刷新
【文章內(nèi)容】
1.類結(jié)構(gòu)圖
類結(jié)構(gòu)圖
MJRefreshComponent.h
/** 刷新控件的基類 */
@interface MJRefreshComponent : UIView
#pragma mark - 刷新狀態(tài)控制
/** 進(jìn)入刷新狀態(tài) */
- (void)beginRefreshing;
/** 結(jié)束刷新狀態(tài) */
- (void)endRefreshing;
/** 是否正在刷新 */
- (BOOL)isRefreshing;
#pragma mark - 其它
/** 根據(jù)拖拽比例自動切換透明度 */
@property (assign, nonatomic, getter=isAutomaticallyChangeAlpha) BOOL automaticallyChangeAlpha;
@end
MJRefreshHeader.h
@interface MJRefreshHeader : MJRefreshComponent
/** 創(chuàng)建 header */
+ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
/** 創(chuàng)建 header */
+ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
/** 這個(gè) key 用來存儲上一次下拉刷新成功的時(shí)間 */
@property (copy, nonatomic) NSString *lastUpdatedTimeKey;
/** 上一次下拉刷新成功的時(shí)間 */
@property (strong, nonatomic, readonly) NSDate *lastUpdatedTime;
/** 忽略多少 scrollView 的 contentInset 的頂部 */
@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetTop;
@end
MJRefreshFooter.h
@interface MJRefreshFooter : MJRefreshComponent
/** 創(chuàng)建 footer */
+ (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
/** 創(chuàng)建 footer */
+ (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
/** 提示沒有更多的數(shù)據(jù) */
- (void)noticeNoMoreData;
/** 重置沒有更多的數(shù)據(jù)(消除沒有更多數(shù)據(jù)的狀態(tài)) */
- (void)resetNoMoreData;
/** 忽略多少 scrollView 的 contentInset 的底部*/
@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom;
/** 自動根據(jù)有無數(shù)據(jù)來顯示和隱藏 */
@property (assign, nonatomic) BOOL automaticallyHidden;
@end
MJRefreshAutoFooter.h
@interface MJRefreshAutoFooter : MJRefreshFooter
/** 是否自動刷新(默認(rèn)為 YES) */
@property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh;
/** 當(dāng)?shù)撞靠丶霈F(xiàn)多少時(shí)就自動刷新(默認(rèn)為1.0,也就是底部控件完全出現(xiàn)時(shí)瞎暑,才會自動刷新) */
@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh;
@end
2.參考例子
ps: 可以下載 MJRefresh試試
MJRefresh 演示
下拉刷新01-默認(rèn)
self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
// 進(jìn)入刷新狀態(tài)后會自動調(diào)用這個(gè)block
}];
// 或
// 設(shè)置回調(diào)(一旦進(jìn)入刷新狀態(tài)彤敛,就調(diào)用 target 的 action,也就是調(diào)用 self 的 loadNewData 方法)
self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 馬上進(jìn)入刷新狀態(tài)
[self.tableView.mj_header beginRefreshing];
下拉刷新01-默認(rèn)
下拉刷新02-動畫圖片
// 設(shè)置回調(diào)(一旦進(jìn)入刷新狀態(tài)了赌,就調(diào)用 targett 的 action墨榄,即調(diào)用 self 的 loadNewData 方法)
MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 設(shè)置普通狀態(tài)的動畫圖片
NSArray *idleImages = @[@"圖片1", @"圖片2", @"圖片3"];
[header setImages:idleImages forState:MJRefreshStateIdle];
// 設(shè)置即將刷新狀態(tài)的動畫圖片(一松開就會刷新的狀態(tài))
NSArray *pullingImages = @[@"圖片1", @"圖片2", @"圖片3"];
[header setImages:pullingImages forState:MJRefreshStatePulling];
// 設(shè)置正在刷新狀態(tài)的動畫圖片
NSArray *refreshingImages = @[@"圖片1", @"圖片2", @"圖片3"];
[header setImages:refreshingImages forState:MJRefreshStateRefreshing];
// 設(shè)置 header
self.tableView.mj_header = header;
下拉刷新02-動畫圖片
下拉刷新03-隱藏時(shí)間
// 隱藏時(shí)間
header.lastUpdatedTimeLabel.hidden = YES;
下拉刷新03-隱藏時(shí)間
下拉刷新04-隱藏狀態(tài)和時(shí)間
// 隱藏時(shí)間
header.lastUpdatedTimeLabel.hidden = YES;
// 隱藏狀態(tài)
header.stateLabel.hidden = YES;
下拉刷新04-隱藏狀態(tài)和時(shí)間
下拉刷新05-自定義文字
// 設(shè)置文字
[header setTitle:@"Pull down to refresh" forState:MJRefreshStateIdle];
[header setTitle:@"Release to refresh" forState:MJRefreshStatePulling];
[header setTitle:@"Loading ..." forState:MJRefreshStateRefreshing];
// 設(shè)置字體
header.stateLabel.font = [UIFont systemFontOfSize:15];
header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:14];
// 設(shè)置顏色
header.stateLabel.textColor = [UIColor redColor];
header.lastUpdatedTimeLabel.textColor = [UIColor blueColor];
下拉刷新05-自定義文字
下拉刷新06-自定義刷新控件
self.tableView.mj_header = [MJDIYHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 具體實(shí)現(xiàn)參考 MJDIYHeader.h 和 MJDIYHeader.m
下拉刷新06-自定義刷新控件
上拉刷新01-默認(rèn)
self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
// 進(jìn)入刷新狀態(tài)后會自動調(diào)用這個(gè) block
}];
// 或
// 設(shè)置回調(diào)(一旦進(jìn)入刷新狀態(tài),就調(diào)用 target 的 action勿她,即調(diào)用 self 的 loadMoreData 方法)
self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
上拉刷新01-默認(rèn)
上拉刷新02-動畫圖片
// 設(shè)置回調(diào)(一旦進(jìn)入刷新狀態(tài)袄秩,就調(diào)用 target 的 action,即調(diào)用 self 的 loadMoreData 方法)
MJRefreshAutoGifFooter *footer = [MJRefreshAutoGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// 設(shè)置刷新圖片
NSArray *refreshingImages = @[@"圖片1", @"圖片2", @"圖片3"];
[footer setImages:refreshingImages forState:MJRefreshStateRefreshing];
// 設(shè)置尾部
self.tableView.mj_footer = footer;
上拉刷新02-動畫圖片
上拉刷新03-隱藏刷新狀態(tài)的文字
// 隱藏刷新狀態(tài)的文字
footer.refreshingTitleHidden = YES;
// 如果沒有上面的方法逢并,就用footer.stateLabel.hidden = YES;
上拉刷新03-隱藏刷新狀態(tài)的文字
上拉刷新04-全部加載完畢
// 變?yōu)闆]有更多數(shù)據(jù)的狀態(tài)
[footer endRefreshingWithNoMoreData];
上拉刷新04-全部加載完畢
上拉刷新05-自定義文字
// 設(shè)置文字
[footer setTitle:@"Click or drag up to refresh" forState:MJRefreshStateIdle];
[footer setTitle:@"Loading more ..." forState:MJRefreshStateRefreshing];
[footer setTitle:@"No more data" forState:MJRefreshStateNoMoreData];
// 設(shè)置字體
footer.stateLabel.font = [UIFont systemFontOfSize:17];
// 設(shè)置顏色
footer.stateLabel.textColor = [UIColor blueColor];
上拉刷新05-自定義文字
上拉刷新06-加載后隱藏
// 隱藏當(dāng)前的上拉刷新控件
self.tableView.mj_footer.hidden = YES;
上拉刷新06-加載后隱藏
上拉刷新07-自動回彈的上拉01
self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
上拉刷新07-自動回彈的上拉01
上拉刷新08-自動回彈的上拉02
MJRefreshBackGifFooter *footer = [MJRefreshBackGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// 設(shè)置普通狀態(tài)的動畫圖片
NSArray *idleImages = @[@"圖片1", @"圖片2", @"圖片3"];
[footer setImages:idleImages forState:MJRefreshStateIdle];
// 設(shè)置即將刷新狀態(tài)的動畫圖片(一松開就會刷新的狀態(tài))
NSArray *pullingImages = @[@"圖片1", @"圖片2", @"圖片3"];
[footer setImages:pullingImages forState:MJRefreshStatePulling];
// 設(shè)置正在刷新狀態(tài)的動畫圖片
NSArray *refreshingImages = @[@"圖片1", @"圖片2", @"圖片3"];
[footer setImages:refreshingImages forState:MJRefreshStateRefreshing];
// 設(shè)置尾部
self.tableView.mj_footer = footer;
上拉刷新08-自動回彈的上拉02
上拉刷新09-自定義刷新控件(自動刷新)
self.tableView.mj_footer = [MJDIYAutoFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// 具體實(shí)現(xiàn)參考MJDIYAutoFooter.h和MJDIYAutoFooter.m
上拉刷新09-自定義刷新控件(自動刷新)
上拉刷新10-自定義刷新控件(自動回彈)
self.tableView.mj_footer = [MJDIYBackFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// 具體實(shí)現(xiàn)參考MJDIYBackFooter.h和MJDIYBackFooter.m
上拉刷新10-自定義刷新控件(自動回彈)
UICollectionView01-上下拉刷新
// 下拉刷新
self.collectionView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
// 進(jìn)入刷新狀態(tài)后會自動調(diào)用這個(gè)block
}];
// 上拉刷新
self.collectionView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
// 進(jìn)入刷新狀態(tài)后會自動調(diào)用這個(gè)block
}];
UICollectionView01-上下拉刷新
UIWebView01-下拉刷新
// 添加下拉刷新控件
self.webView.scrollView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
// 進(jìn)入刷新狀態(tài)后會自動調(diào)用這個(gè)block
}];
UIWebView01-下拉刷新
-
over
以上是 MJRefresh 的具體用法之剧,有興趣的朋友還可以參考下MJRefresh/README.md