1.自己这块分页逻辑的代码长时间形成的自己的常用写法,发现都是重复的拷贝,然后看到一个swift项目中使用协议把下拉刷新和上拉加载更多进行了封装,所以自己就把这块代码抽出封装成一个TableViewPageRequestTool类
2.至于MVC和MVVM的,我还是喜欢根据不同的功能封装工具类然后去组装使用,个人浅见最好的结构是:代码可以尽可能多的复用,然后逻辑清晰简单,不给后来人多余的学习成本,更不给他们留坑😓
下面代码:
TableViewPageRequestTool.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface TableViewPageRequestTool : NSObject
typedef void(^GetDataFromNetwork)(NSInteger page,NSInteger count,UITableView * tableView, TableViewPageRequestTool *tool);
@property (nonatomic, strong, readonly)NSMutableArray *dataArr;
@property (nonatomic, copy)GetDataFromNetwork getDataFromNetwork;
/**初始化 PageCount:每页条数*/
- (instancetype)initWithTableView:(UITableView *)tableView PageCount:(NSInteger)pageCount;
/**下拉加载最新的数据*/
-(void)getFirstData;
/**上拉加载更多的数据*/
-(void)getMoreData;
/**处理返回的具体数据*/
-(void)dealRefreshWithModelArr:(NSArray *)arr;
/**结束刷新*/
-(void)endRefreshing;
@end
NS_ASSUME_NONNULL_END
TableViewPageRequestTool.m
#import "TableViewPageRequestTool.h"
#import "XLCommonTool.h"
@interface TableViewPageRequestTool ()
@property (nonatomic, strong)UITableView *tableView;
@property (nonatomic, strong, readwrite)NSMutableArray *dataArr;
//分页查询使用
@property (nonatomic, assign)NSInteger page;
@property (nonatomic, assign)NSInteger count;
@end
@implementation TableViewPageRequestTool
- (instancetype)initWithTableView:(UITableView *)tableView PageCount:(NSInteger)pageCount
{
self = [super init];
if (self) {
self.tableView = tableView;
self.page = 1;
self.count = pageCount;
WEAK_SELF
self.tableView.mj_header = [RefreshHeader headerWithRefreshingBlock:^{
[weakSelf getFirstData];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[weakSelf.tableView.mj_header endRefreshing];
});
}];
self.tableView.mj_footer = [RefreshFooter footerWithRefreshingBlock:^{
[weakSelf getMoreData];
}];
[self.tableView.mj_header beginRefreshing];
}
return self;
}
//下拉加载最新的数据
-(void)getFirstData{
self.page = 1;
self.dataArr = [NSMutableArray array];
[self.tableView.mj_footer resetNoMoreData];
self.getDataFromNetwork(self.page, self.count, self.tableView, self);
}
//上拉加载更多的数据
-(void)getMoreData{
self.page++;
self.getDataFromNetwork(self.page, self.count, self.tableView, self);
}
//处理返回的具体数据
-(void)dealRefreshWithModelArr:(NSArray *)arr{
if (self.page == 1) {
self.dataArr = [NSMutableArray arrayWithArray:arr];
}else{
[self.dataArr addObjectsFromArray:arr];
}
[self.tableView reloadData];
if (arr.count < self.count) {
[self.tableView.mj_header endRefreshing];
[self.tableView.mj_footer endRefreshingWithNoMoreData];
BOOL isHidden = (arr.count > 0) ? NO : YES;
self.tableView.mj_footer.hidden = isHidden;
}else{
[self.tableView.mj_header endRefreshing];
[self.tableView.mj_footer endRefreshing];
}
}
-(void)endRefreshing{
[self.tableView.mj_header endRefreshing];
[self.tableView.mj_footer endRefreshing];
}
@end
具体使用:
@property (nonatomic, strong)TableViewPageRequestTool* requestTool;