溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

iOS中上下拉刷新控件MJRefresh怎么用

發(fā)布時間:2021-08-04 11:37:28 來源:億速云 閱讀:140 作者:小新 欄目:移動開發(fā)

這篇文章主要為大家展示了“iOS中上下拉刷新控件MJRefresh怎么用”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“iOS中上下拉刷新控件MJRefresh怎么用”這篇文章吧。

MJRefresh是一個好用的上下拉刷新的控件

iOS中上下拉刷新控件MJRefresh怎么用
使用

在github上下載之后,將MJRefresh文件添加到項目中,并且在需要使用的文件上引入MJRefresh.h。然后在該文件的viewDidLoad方法中指定tableView的header和footer,如下:

#import "MJRefreshTableViewController.h"
#import "MJRefresh.h"

@interface MJRefreshTableViewController ()
@property (strong, nonatomic) IBOutlet UITableView *tableView;
@end

@implementation MJRefreshTableViewController

- (void)viewDidLoad {
[super viewDidLoad];

__weak typeof(self) weakSelf = self;
self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
 //刷新時候,需要執(zhí)行的代碼。一般是請求最新數(shù)據(jù),請求成功之后,刷新列表
 [weakSelf loadNewData];
}];

self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
 //刷新時候,需要執(zhí)行的代碼。一般是請求更多數(shù)據(jù),請求成功之后,刷新列表
 [weakSelf loadNoreData];
}];
}

/**
 請求獲取最新的數(shù)據(jù)
 */
- (void)loadNewData {
NSLog(@"請求獲取最新的數(shù)據(jù)");

//這里假設(shè)2秒之后獲取到了最新的數(shù)據(jù),刷新tableview,并且結(jié)束刷新控件的刷新狀態(tài)
__weak typeof(self) weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
 //刷新列表
 [weakSelf.tableView reloadData];
 //拿到當前的刷新控件,結(jié)束刷新狀態(tài)
 [weakSelf.tableView.mj_header endRefreshing];
});
}

/**
 請求獲取更多的數(shù)據(jù)
 */
- (void)loadNoreData {
NSLog(@"請求獲取更多的數(shù)據(jù)");

//這里假設(shè)2秒之后獲取到了更多的數(shù)據(jù),刷新tableview,并且結(jié)束刷新控件的刷新狀態(tài)
__weak typeof(self) weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
 //刷新列表
 [weakSelf.tableView reloadData];
 //拿到當前的刷新控件,結(jié)束刷新狀態(tài)
 [weakSelf.tableView.mj_footer endRefreshing];
});
}
@end

按照app的實際情況來說,loadNoreData 和 loadNewData方法應(yīng)該是發(fā)送數(shù)據(jù)請求,而結(jié)束刷新控件的刷新狀態(tài)應(yīng)該是在請求失敗或者請求成功的方法中調(diào)用。

如果是帶動圖的刷新控件的話,就直接替換在viewDidLoad中的寫法即可。

- (void)viewDidLoad {
[super viewDidLoad];

__weak typeof(self) weakSelf = self;
MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];

[header setImages:idleImages forState:MJRefreshStateIdle];
[header setImages:pullingImages forState:MJRefreshStatePulling];
[header setImages:refreshingImages forState:MJRefreshStateRefreshing];

self.tableView.mj_header = header;
}

其中idleImages,pullingImages,refreshingImages是圖片數(shù)組,分別對應(yīng)普通閑置狀態(tài),松開就可以進行刷新的狀態(tài),正在刷新中的狀態(tài)等的圖片。注意,idleImages等圖片數(shù)組存儲的對象是UIImage。

如果只設(shè)置了refreshingImages,只要在刷新狀態(tài)下顯示圖片,其他狀態(tài)不顯示圖片。如果設(shè)置了idleImages或者pullingImages其中之一,所有狀態(tài)下都顯示設(shè)置的圖片。
同理,設(shè)置底部帶動畫效果的footer:

- (void)viewDidLoad {
[super viewDidLoad];

MJRefreshBackGifFooter *footer = [MJRefreshBackGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(endRefreshing)];

[footer setImages:idleImages forState:MJRefreshStateIdle];
[footer setImages:pullingImages forState:MJRefreshStatePulling];
[footer setImages:refreshingImages forState:MJRefreshStateRefreshing];

self.tableView.mj_footer = footer;
}

PO一張效果圖:

iOS中上下拉刷新控件MJRefresh怎么用

header.stateLabel.hidden = YES;
header.lastUpdatedTimeLabel.hidden = YES;

如果隱藏右邊狀態(tài)或者更新時間其中一行文字,則顯示的一行文字會垂直居中,效果如下:

iOS中上下拉刷新控件MJRefresh怎么用

如果把右邊的兩行文字都隱藏了,只顯示圖片,則圖片居中,效果如下:

iOS中上下拉刷新控件MJRefresh怎么用

如果覺得動畫頻率過快或者過低,可以修改MJRefresh以下位置。

iOS中上下拉刷新控件MJRefresh怎么用

使用以下方法還可以修改顯示文字

[header setTitle:@"下拉刷新" forState:MJRefreshStateIdle];
[header setTitle:@"釋放開始刷新哦~" forState:MJRefreshStatePulling];
[header setTitle:@"正在快馬加鞭地刷新著呢" forState:MJRefreshStateRefreshing];

其他控件的用法

UICollectionView 和UIScrollView的用法與UITableView的用法一致,只需將上面所說的tableView.mj_header 改成 collectionView.mj_header 和 scrollView.mj_header 即可。例如:

self.collectionView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
 //刷新時候,需要執(zhí)行的代碼。一般是請求最新數(shù)據(jù),請求成功之后,刷新列表
 [weakSelf loadNewData];
}];
self.scrollView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
 //刷新時候,需要執(zhí)行的代碼。一般是請求最新數(shù)據(jù),請求成功之后,刷新列表
 [weakSelf loadNewData];
}];

又因UIWebView 自帶一個UIScrollView的屬性,所以UIWebView也可以使用MJRefresh,用法如下:

self.webView.scrollView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
 //刷新時候,需要執(zhí)行的代碼。一般是請求最新數(shù)據(jù),請求成功之后,刷新列表
 [weakSelf loadNewData];
}];

以上是“iOS中上下拉刷新控件MJRefresh怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI