viewController 瘦身 -- 通过新建DataSource类来管理tableView的数据源方法

大致思路: 新建一个DataSource类,把tableView 的数据源代理交给这个类。

核心代码:

ViewController中:

- (void)setupTableView {
      // 创建回调,用于在数据源方法中,对cell进行处理
    TableViewCellConfigureBlock configureBlock = ^(TestCell *cell, model *item) {
        [cell configureWithModel:item];
    };  // 创建dataSource类,同时把需要用到的数据,cellId, 回调传进去
    self.dataSource = [[ArrayDataSource alloc] initWithItems:self.modelArr cellIdentifier:CellId configureCellBlock:configureBlock];  // 设置数据源代理
    self.mainTable.dataSource = self.dataSource;
}

新建的ArrayDataSource类:

- (instancetype)initWithItems:(NSArray *)anItems cellIdentifier:(NSString *)aCellIdentifier configureCellBlock:(TableViewCellConfigureBlock)aConfigureBlock {

    if (self = [super init]) {

        self.itmes = anItems;
        self.cellIdentifier = aCellIdentifier;
        self.configureBlock = aConfigureBlock;
    }
    return self;
}
// 数据源代理
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return self.itmes.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:self.cellIdentifier];
    id item = self.itmes[indexPath.row];
    self.configureBlock(cell, item);

    return cell;
}

Cell 处理方法
- (void)configureWithModel:(model *)m {

    self.titleLabel.text = m.title;
    self.descLabel.text = m.desc;
}

Github 上的实例项目

时间: 2024-10-11 04:54:37

viewController 瘦身 -- 通过新建DataSource类来管理tableView的数据源方法的相关文章

viewcontroller瘦身之一(转载)

在一个IOS项目中,viewcontroller通常是最大的文件,并且包含了许多不必要的代码,重用率是最低的. 我们可以尝试给viewcontroller瘦身,让他看起来不是那么的臃肿. 今天说到的是,UITableViewDataSource. UITableview可能是平时写项目中用到的最多的组件了,使用它要实现它的代理协议和数据源方法,每次都是那么些东西方法controller中,看起来不舒服,我们可以给他瘦身一下.比如这样做. 因为datasource基本上是围绕数组去做一些事,更针对

iOS:使用MVC模式帮ViewController瘦身

如何给UIViewController瘦身 随着程序逻辑复杂度的提高,你是否也发现了App中一些ViewController的代码行数急剧增多,达到了2,3千行,甚至更多.这时如果想再添加一点功能或者修改现有逻辑变得让人无比头疼.如果你遇到了这类问题,那是时候停下来了,思考一下如何更好地组织代码,给VC瘦身.本文将会阐述如何结合MVC的思想帮你的VC瘦身同时提高复用和可扩展性. 一.开发中常见的现象和缺点 iOS中最常见的一种设计模式就是MVC,但在实际开发过程中,我们因为这样.那样的原因让单纯

iOS开发>学无止境 - 使用MVC模式帮ViewController瘦身

随着程序逻辑复杂度的提高,你是否也发现了App中一些ViewController的代码行数急剧增多,达到了2,3千行,甚至更多.这时如果想再添加一点功能或者修改现有逻辑变得让人无比头疼.如果你遇到了这类问题,那是时候停下来了,思考一下如何更好地组织代码,给VC瘦身.本文将会阐述如何结合MVC的思想帮你的VC瘦身同时提高复用和可扩展性. 一.开发中常见的现象和缺点 iOS中最常见的一种设计模式就是MVC,但在实际开发过程中,我们因为这样.那样的原因让单纯的ViewController变成了集Mod

iOS架构师之路:控制器(View Controller)瘦身设计

前言 古老的MVC架构是容易被iOS开发者理解和接受的设计模式,但是由于iOS开发的项目功能越来越负责庞大,项目代码也随之不断壮大,MVC的模糊定义导致我们的业务开发工程师很容易把大量的代码写到视图控制器中,行业中对这种控制器有个专业词汇Massive ViewControler(臃肿的视图控制器).代码臃肿导致可读性可维护性差,而且这种不清晰的设计还有许多的副作用,比如代码重用性差.作为架构师需要关注项目的代码质量.指导业务开发工程师写出高质量,高健壮性,高可用的代码也是很重要的工作.因此需要

控制器瘦身及tableView相关

今天简单介绍下为ViewController瘦身的一些想法,不足之处还请指出. 一.关于MVVM设计模式 网上的介绍很多,简单说下我的理解. 个人理解: MVVM = 控制器 + 视图 + 数据模型 + 视图模型 其中 视图模型View - Model 是将 控制控制器中的 网络请求 下拉刷新 下拉加载 及用户交互操作 剥离出来 放到一个工具类里面 由此达到解耦合为控制器瘦身的目的. 二.关于小型工厂模式的使用         开发过程中UITableView的使用频率很高,可你是怎样创建tab

iOS 瘦身ViewController 分离tableViewDataSource

1: #import <Foundation/Foundation.h> typedef void(^configureCellBlock)(id cell, id item);//瘦身viewcontroller @interface RRFriendTableViewDataSource : NSObject<UITableViewDataSource> - (id)initWithItems:(NSArray *)items cellItentifier:(NSString

iOS控制器瘦身-面向超类编程

点击查看作者简书地址 今天写这篇文章的目的,是提供一种思路,来帮助大家解决控制器非常臃肿的问题,对控制器瘦身. 如果手边有项目,不妨打开工程看一下你的控制器代码有多少行,是不是非常多?再看一下tableView的代理方法cellForRow和heightForRow的代码是不是也是非常多?里面夹杂着switch和大量if esle的判断逻辑的代码.后期维护看着这些if else是不是特别烦躁?特别是自己在维护前人写的代码,并且还没有注释 一团糟,是不是有更想骂人的冲动?别怕,这里给您提供一种解决

如何给UIViewController瘦身

本文转载至  http://www.cocoachina.com/ios/20141128/10356.html 随着程序逻辑复杂度的提高,你是否也发现了App中一些ViewController的代码行数急剧增多,达到了2.3千行,甚至更多.这时如果想再添加一点功能或者修改现有逻辑变得让人无比头疼.如果你遇到了这类问题,那是时候停下来了,思考一下如何更好地组织代码,给VC瘦身.本文将会阐述如何结合MVC的思想帮你的VC瘦身同时提高复用和可扩展性. 一.开发中常见的现象和缺点 iOS中最常见的一种

[转]基于clang插件的一种iOS包大小瘦身方案

转自:http://mp.weixin.qq.com/s?__biz=MzA3ODg4MDk0Ng==&mid=2651112856&idx=1&sn=b2c74c62a10b4c9a4e7538d1ad7eb739 iOS包瘦身,对于一般团队来说并不是优化的首要目标,但是对于一些安装包已经超限的团队来说非常关键.微信和阿里移动安全都分享过相关的内容,后者采用的是去除无用代码的思路,感兴趣的同学可以阅读: iOS瘦身之删除无用的mach-O文件 而本文则将这个思路发挥到了极致,欢迎