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

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

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

下面讲一下封装思路

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;
}

代码地址

你可能感兴趣的:(网络,UITableView,下拉刷新)