UITableView分页请求的封装

1.自己这块分页逻辑的代码长时间形成的自己的常用写法,发现都是重复的拷贝,然后看到一个swift项目中使用协议把下拉刷新和上拉加载更多进行了封装,所以自己就把这块代码抽出封装成一个TableViewPageRequestTool类
2.至于MVC和MVVM的,我还是喜欢根据不同的功能封装工具类然后去组装使用,个人浅见最好的结构是:代码可以尽可能多的复用,然后逻辑清晰简单,不给后来人多余的学习成本,更不给他们留坑

下面代码:
TableViewPageRequestTool.h

#import 
#import 

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;


UITableView分页请求的封装_第1张图片
image.png

你可能感兴趣的:(UITableView分页请求的封装)