UITableView的懒人封装(几句代码搞定网络加载,上下拉刷新)

    xiaoxiao2021-04-15  50

    代码写的多了有时你会发现,常见的tableview无非是加上下刷新,加载接口,自定义Cell,传入数据模型,千篇一律,但你又不得不去写,干脆就去ctrl+c和ctrl+v,那么能不封装一个tableview,一个初始化就搞定呢,答案是可以的。在写之前你必须了解这个封装tableView的使用限制


    你的自定义Cell不能有复杂的交互,比如长按手势,accessoryView带Button等,当然,你可以自己去加代理去实现这些功能,但这会破坏封装的通用性自定义Cell最好是autolayout布局(案例中使用masonry框架)点击事件需使用代理实现,不能封装.

    下面讲一下封装思路

    1、确定初始化方法的传参 2、确定使用的三方框架,这里我使用了 XMNetworking、Masonry、MJExtention、MJRefresh 你可以根据自己项目中的框架做适当的改变

    关键性代码片段

    /** 封装的自定义tableView初始化方法 @param url 接口地址 @param paramters 接口传参(一般列表请求都是POST请求) @param cellClassName 自定义Cell的类名 @param modelClassName model模型类名 @param cellModelName model在Cell中的属性名 @return table */ - (instancetype)initWithRequestUrl:(NSString *)url paramters:(NSMutableDictionary *)paramters cellClassName:(NSString *)cellClassName modelClassName:(NSString *)modelClassName cellModelName:(NSString *)cellModelName; -(instancetype)initWithRequestUrl:(NSString *)url paramters:(NSMutableDictionary *)paramters cellClassName:(NSString *)cellClassName modelClassName:(NSString *)modelClassName cellModelName:(NSString *)cellModelName{ if (self = [super init]) { _url = url; _paramters = paramters; _cellClassName = cellClassName; _modelClassName = modelClassName; _cellModelName = cellModelName; self.backgroundColor = TableBackgroundColor; [self registerClass:NSClassFromString(cellClassName) forCellReuseIdentifier:@"Cell"]; self.estimatedRowHeight = 100.f; self.delegate = self; self.dataSource = self; self.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ _page = 1; [self loadData]; }]; self.mj_footer =[MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{ _page++; [self loadData]; }]; } return self; }

    代码地址

    转载请注明原文地址: https://ju.6miu.com/read-671237.html

    最新回复(0)