GitHub : https://github.com/CoderMJLee/MJRefreshgit
1,UIRefresh是蘋果自帶的刷新控件
2,支持iOS6.0以後的版本
3,一旦被分配到一個UITableViewController,控件的框架是自動管理github
// 刷新中得狀態判斷,只讀屬性,根據狀態可作一些自定義的事情 @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是繼承於UIView的自定義刷新控件
支持哪些控件的刷新?
UIScrollView、UITableView、UICollectionView、UIWebView
從iOS9以後,用MJRefresh框架的時候使用它的屬性和方法,大部分須要加入mj_ 開頭做爲前綴 網絡
- 該框架純ARC,兼容的系統>=iOS6.0、iPhone\iPad橫豎屏
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];
self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ // 進入刷新狀態後會自動調用這個block }]; //或 // 設置回調(一旦進入刷新狀態,就調用target的action,也就是調用self的loadNewData方法) self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)]; // 立刻進入刷新狀態 [self.tableView.header beginRefreshing];
[動畫
// 刷新控件的狀態 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;
[ui
// 隱藏時間 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下載地址中查看
給出的這些應該足夠平時的開發,但願多多給建議atom