美文网首页iOS接下来要研究的知识点
UITableView分页请求的封装

UITableView分页请求的封装

作者: 辛乐 | 来源:发表于2020-06-17 15:48 被阅读0次

    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;


    image.png

    相关文章

      网友评论

        本文标题:UITableView分页请求的封装

        本文链接:https://www.haomeiwen.com/subject/zyssxktx.html