在ios7之前,一直在使用開源的EGO庫。但是,在使用過程中發現,普遍封裝得過於復雜、耦合性強,不利於集成到自己的項目中。
另外,在ios7之后,一些原有的下拉刷新,上提加載控件表現的就不是那么出色了。除了可能出錯外,也不符合扁平化的風格。
后來,在code4App上發現了一個大牛上傳了一個開源代碼, 僅需幾行代碼就可以為UITableView或者CollectionView加上下拉刷新或者上拉刷新功能。可以自定義上下拉刷新的文字說明。
下載下來自己試了下,發現不錯。 mark下。
下載鏈接:http://code4app.com/ios/快速集成下拉上拉刷新/52326ce26803fabc46000000
下面紀錄下自己的集成過程,當然,作者所給的demo里面已經很詳細的給出了。 這里只不過是紀錄下自己的實現過程而已。
1.將MJRefresh文件夾整個導入所需的工程中。
2.文件夾中的MJRefresh.bundle--->arrow@2x.png 圖片可自行替換,這個會在刷新過程中顯示。
3.可以在MJRefreshConst.h和MJRefreshConst.m文件中自定義顯示的文字內容和文字顏色。
4.只要你的view能夠滾動,就能集成這個控件,比如UIScrollView、UITableView、UICollectionView
5.在需要使用的地方,加入如下代碼即可。
5.1 導入頭文件
1 #import "MJRefresh.h"
5.2 遵從協議
1 @interface ViewController ()<MJRefreshBaseViewDelegate>
5.3 為你的view添加控件
1 MJRefreshFooterView *footer = [MJRefreshFooterView footer]; 2 footer.scrollView = myTableView; 3 footer.delegate = self; 4 5 MJRefreshHeaderView *header = [MJRefreshHeaderView header]; 6 header.scrollView = myTableView; 7 header.delegate = self;
5.4實現代理方法
1 #pragma mark - 刷新控件的代理方法 2 #pragma mark 開始進入刷新狀態 3 - (void)refreshViewBeginRefreshing:(MJRefreshBaseView *)refreshView 4 { 5 NSLog(@"%@----開始進入刷新狀態", refreshView.class); 6 // 2.2秒后刷新表格UI 7 [self performSelector:@selector(doneWithView:) withObject:refreshView afterDelay:2.0]; 8 9 } 10 11 #pragma mark 刷新完畢 12 - (void)refreshViewEndRefreshing:(MJRefreshBaseView *)refreshView 13 { 14 NSLog(@"%@----刷新完畢", refreshView.class); 15 } 16 17 #pragma mark 監聽刷新狀態的改變 18 - (void)refreshView:(MJRefreshBaseView *)refreshView stateChange:(MJRefreshState)state 19 { 20 switch (state) { 21 case MJRefreshStateNormal: 22 NSLog(@"%@----切換到:普通狀態", refreshView.class); 23 break; 24 25 case MJRefreshStatePulling: 26 NSLog(@"%@----切換到:松開即可刷新的狀態", refreshView.class); 27 break; 28 29 case MJRefreshStateRefreshing: 30 NSLog(@"%@----切換到:正在刷新狀態", refreshView.class); 31 break; 32 default: 33 break; 34 } 35 } 36 37 #pragma mark 刷新表格並且結束正在刷新狀態 38 - (void)doneWithView:(MJRefreshBaseView *)refreshView 39 { 40 // 刷新表格 41 [myTableView reloadData]; 42 43 // (最好在刷新表格后調用)調用endRefreshing可以結束刷新狀態 44 [refreshView endRefreshing]; 45 }
6.你可以通過調用beginRefreshing自動進入下拉刷新狀態。
7.你可以通過調用endRefreshing結束刷新狀態。
8.為了保證內部不泄露,最好在控制器的dealloc中釋放占用的內存
- (void)dealloc
{
[_header free];
[_footer free];
}