日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MJRefresh-简单使用

發布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MJRefresh-简单使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MJRefresh-簡單使用

#import <MJRefresh.h>@interface HKTopicViewController () /** 當前最后一條帖子數據的描述信息,專門用來加載下一頁數據 */ @property (nonatomic, copy) NSString *maxtime; /** 所有的帖子數據 */ @property (nonatomic, strong) NSMutableArray<HKTopic *> *topics; /** 請求管理者 */ @property (nonatomic, strong) AFHTTPSessionManager *manager; @end- (AFHTTPSessionManager *)manager {if (!_manager) {_manager = [AFHTTPSessionManager manager];}return _manager; }- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = RGB(206, 206, 206);self.tableView.contentInset = UIEdgeInsetsMake(HKNavMaxY + HKTitlesViewH, 0, HKTabBarH, 0);self.tableView.scrollIndicatorInsets = self.tableView.contentInset;self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;// 注冊cellUINib *nib = [UINib nibWithNibName:NSStringFromClass([HKTopicCell class]) bundle:nil];[self.tableView registerNib:nib forCellReuseIdentifier:HKTopicCellId];[self setupRefresh]; } - (void)setupRefresh {// 廣告條UILabel *label = [[UILabel alloc] init];label.backgroundColor = [UIColor blackColor];label.frame = CGRectMake(0, 0, 0, 30);label.textColor = [UIColor whiteColor];label.text = @"廣告";label.textAlignment = NSTextAlignmentCenter;self.tableView.tableHeaderView = label;// headerself.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewTopics)];// 自動切換透明度self.tableView.mj_header.automaticallyChangeAlpha = YES;[self.tableView.mj_header beginRefreshing];// footerself.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreTopics)]; } #pragma mark - 數據處理 /*** 發送請求給服務器,下拉刷新數據*/ - (void)loadNewTopics {// 1.取消之前的請求 [self.manager.tasks makeObjectsPerformSelector:@selector(cancel)];// 2.拼接參數NSMutableDictionary *parameters = [NSMutableDictionary dictionary];parameters[@"a"] = @"list";parameters[@"c"] = @"data";parameters[@"type"] = @(self.type);// 3.發送請求[self.manager GET:HKCommonURL parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {// 存儲maxtimeself.maxtime = responseObject[@"info"][@"maxtime"];// 字典數組 -> 模型數據self.topics = [HKTopic mj_objectArrayWithKeyValuesArray:responseObject[@"list"]];// 刷新表格 [self.tableView reloadData];// 結束刷新 [self.tableView.mj_header endRefreshing];} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {if (error.code != NSURLErrorCancelled) { // 并非是取消任務導致的error,其他網絡問題導致的error[SVProgressHUD showErrorWithStatus:@"網絡繁忙,請稍后再試!"];}// 結束刷新 [self.tableView.mj_header endRefreshing];}]; }/*** 發送請求給服務器,上拉加載更多數據*/ - (void)loadMoreTopics {// 1.取消之前的請求 [self.manager.tasks makeObjectsPerformSelector:@selector(cancel)];// 2.拼接參數NSMutableDictionary *parameters = [NSMutableDictionary dictionary];parameters[@"a"] = @"list";parameters[@"c"] = @"data";parameters[@"type"] = @(self.type);parameters[@"maxtime"] = self.maxtime;// 3.發送請求[self.manager GET:HKCommonURL parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {// 存儲maxtimeself.maxtime = responseObject[@"info"][@"maxtime"];// 字典數組 -> 模型數據NSArray *moreTopics = [HKTopic mj_objectArrayWithKeyValuesArray:responseObject[@"list"]];// 累加到舊數組的后面 [self.topics addObjectsFromArray:moreTopics];// 刷新表格 [self.tableView reloadData];// 結束刷新 [self.tableView.mj_footer endRefreshing];if (self.topics.count >= 60) {[self.tableView.mj_footer endRefreshingWithNoMoreData];} else {[self.tableView.mj_footer endRefreshing];}} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {if (error.code != NSURLErrorCancelled) { // 并非是取消任務導致的error,其他網絡問題導致的error[SVProgressHUD showErrorWithStatus:@"網絡繁忙,請稍后再試!"];}// 結束刷新 [self.tableView.mj_footer endRefreshing];}]; } #pragma mark - 數據源 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {// 根據數據量顯示或者隱藏footerself.tableView.mj_footer.hidden = (self.topics.count == 0);return self.topics.count; } - (void)scrollViewDidScroll:(UIScrollView *)scrollView {// 清除內存緩存 [[SDImageCache sharedImageCache] clearMemory]; }

?刷新控件的狀態:

/** 刷新控件的狀態 */ typedef NS_ENUM(NSInteger, MJRefreshState) {/** 普通閑置狀態 */MJRefreshStateIdle = 1,/** 松開就可以進行刷新的狀態 */MJRefreshStatePulling,/** 正在刷新中的狀態 */MJRefreshStateRefreshing,/** 即將刷新的狀態 */MJRefreshStateWillRefresh,/** 所有數據加載完畢,沒有更多的數據了 */MJRefreshStateNoMoreData };

①(局部自定義)設置狀態文字顏色-自動切換透明度

自定義一個類HKRefreshHeader繼承于:MJRefreshNormalHeader

#import "HKRefreshHeader.h"@implementation HKRefreshHeader- (instancetype)initWithFrame:(CGRect)frame {if (self = [super initWithFrame:frame]) {// 設置狀態文字顏色self.stateLabel.textColor = [UIColor blueColor];self.stateLabel.font = [UIFont systemFontOfSize:17];[self setTitle:@"趕緊下拉刷新" forState:MJRefreshStateIdle];[self setTitle:@"松開?上刷新" forState:MJRefreshStatePulling];[self setTitle:@"正在拼命刷新..." forState:MJRefreshStateRefreshing];// 隱藏時間self.lastUpdatedTimeLabel.hidden = YES;// 自動切換透明度self.automaticallyChangeAlpha = YES;}return self; }@end

②(全部自定義)

自定義一個類HKCustomRefreshHeader繼承于:MJRefreshHeader

#import "HKCustomRefreshHeader.h" @interface HKCustomRefreshHeader() /** 開關 */ @property (nonatomic, weak) UISwitch *s; /** logo */ @property (nonatomic, weak) UIImageView *logo; @end@implementation HKCustomRefreshHeader - (instancetype)initWithFrame:(CGRect)frame {if (self = [super initWithFrame:frame]) {UISwitch *s = [[UISwitch alloc] init];[self addSubview:s];self.s = s;UIImageView *logo = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MainTitle"]];[self addSubview:logo];self.logo = logo;//self.height = 70;//修改高度 }return self; }- (void)layoutSubviews {[super layoutSubviews];self.logo.centerX = self.width * 0.5;self.logo.y = - 3 * self.logo.height;self.s.centerX = self.width * 0.5;self.s.centerY = self.height * 0.5; }#pragma mark - 重寫Header內部的方法 - (void)setState:(MJRefreshState)state {[super setState:state];if (state == MJRefreshStateIdle) { // 下拉可以刷新 [self.s setOn:NO animated:YES];[UIView animateWithDuration:0.25 animations:^{self.s.transform = CGAffineTransformIdentity;}];} else if (state == MJRefreshStatePulling) { // 松開立即刷新 [self.s setOn:YES animated:YES];[UIView animateWithDuration:0.25 animations:^{self.s.transform = CGAffineTransformMakeRotation(M_PI_2);}];} else if (state == MJRefreshStateRefreshing) { // 正在刷新 [self.s setOn:YES animated:YES];[UIView animateWithDuration:0.25 animations:^{self.s.transform = CGAffineTransformMakeRotation(M_PI_2);}];} } @end

使用:

// header self.tableView.mj_header = [HKRefreshHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewTopics)];

?補充:

MJRefresh 下拉刷新頭部不顯示的問題

在uicollectionView 頭部有偏移量的時候, 往往給其加下拉刷新的的時候 , 頭部的字(mj默認的)往往顯示不出來, 此時就需要

MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{}]; header.ignoredScrollViewContentInsetTop = 20; self.collectionView.mj_header = header;

?

?

轉載于:https://www.cnblogs.com/StevenHuSir/p/MJRefresh_Use.html

總結

以上是生活随笔為你收集整理的MJRefresh-简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。