iOS 瘦身ViewController 分离tableViewDataSource

原创 2015年07月07日 14:25:55


1:

#import <Foundation/Foundation.h>
typedef void(^configureCellBlock)(id cell, id item);//瘦身viewcontroller


@interface RRFriendTableViewDataSource : NSObject<UITableViewDataSource>
- (id)initWithItems:(NSArray *)items cellItentifier:(NSString *)cellIdentify configureCellBlock:(configureCellBlock)cellBlock;

- (id)itemAtIndexPath:(NSIndexPath *)indexPath;
@end


2:

#import "RRFriendTableViewDataSource.h"
#import "RRFriendViewControllerCell.h"

@interface RRFriendTableViewDataSource ()
@property (nonatomic,strong) NSArray *items;
@property (nonatomic,copy)   NSString *cellIdentify;
@property (nonatomic,copy)   configureCellBlock cellBlock;
@end

@implementation RRFriendTableViewDataSource
- (id)init{
    return nil;
}
- (id)initWithItems:(NSArray *)items cellItentifier:(NSString *)cellIdentify configureCellBlock:(configureCellBlock)cellBlock{
    self=[super init];
    if (self) {
        self.items=items;
        self.cellIdentify=cellIdentify;
        self.cellBlock=cellBlock;
    }
    return self;
}
- (id)itemAtIndexPath:(NSIndexPath *)indexPath{
    return self.items[(NSUInteger)indexPath.row];
}
#pragma mark - dataSource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    if (section==0) {
        return 1;
    }
    return self.items.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    if (indexPath.section==0) {
        UITableViewCell *cell=[self tableViewZero:tableView cellForRowAtIndexPath:indexPath];
        return cell;
    }
    RRFriendViewControllerCell *cell=[tableView dequeueReusableCellWithIdentifier:self.cellIdentify];
    if (cell==nil) {
        cell=[[RRFriendViewControllerCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:self.cellIdentify];
    }
    id item=[self itemAtIndexPath:indexPath];
    self.cellBlock(cell,item);
    return cell;
}
- (UITableViewCell *)tableViewZero:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    
    UITableViewCell *cell=[[UITableViewCell alloc]init];
    UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(0,0, [UIScreen mainScreen].bounds.size.width,44)];
    label.textAlignment=NSTextAlignmentCenter;
    label.text=@"xxxxxxxx";
    [cell.contentView addSubview:label];
    cell.backgroundColor=RGBACOLOR(235, 235, 235, 1);
    return cell;
}
@end


3:使用方法

可以把ViewController里面的tableViewDataSource的三个方法给去掉,然后在加载tableview的时候写上,

NSArray *array=[NSArray arrayWithArray:self.cellInfoArray];
    void (^configureCell)(RRFriendViewControllerCell*,RRFriendViewControllerModel *) = ^(RRFriendViewControllerCell* cell,RRFriendViewControllerModel *modelInfo) {
        
        PAImageView *image=[[PAImageView alloc]initWithFrame:cell.myimage.bounds backgroundProgressColor:[UIColor lightGrayColor] progressColor:nil image:nil];
        [cell.myimage addSubview:image];
        [image setImageURL:modelInfo.image];
        cell.mynickName=modelInfo.nickName;
        cell.myID=modelInfo.ID;
        cell.myrunDistance=modelInfo.rundistance;
        cell.mydistance=modelInfo.distance;
    };
    
    self.arrayDataSource=[[RRFriendTableViewDataSource alloc]initWithItems:array cellItentifier:@"RRFriendViewControllerCell" configureCellBlock:configureCell];
    
    self.myTableView.dataSource=self.arrayDataSource;

版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS Controller 瘦身运动之 UItableView datasource 与 delegate的分离

iOS Controller 瘦身运动之 UItableView datasource 与 delegate的分离         最近在公司进行了代码的一些优化,所以在空闲之余,把相关的经验...

ViewController 瘦身的另一种解决方案

对于Massive View Controller,现在流行的解决方案是MVVM架构,把业务逻辑移入ViewModel来减少ViewController中的代码。 这几天又看到另一种方案,在...

tableview的代理分离,帮助控制瘦身

刚刚看了一个关于iOS设计模式的文章,里面提到了tableView代理分离的一种控制器瘦身模式,也可以理解为MVVM模式的一部分,参考点击打开链接。 这里我先简单的将一下这分离过程。 先创建一个代...

GMTC滴滴出行iOS端瘦身实践

  • 2017年11月10日 11:06
  • 18.68MB
  • 下载

【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记36 TableViewDatasource

TableView是iOS开发中非常重要的内容。 TableView的作用是在一张表格中展示数据,它是UISCrollView的子类,你会看到当table中的cell条目多的时候你可以通过上下滑...

滴滴出行iOS端瘦身实践

  • 2017年12月10日 11:08
  • 2.87MB
  • 下载

ios7自定义viewcontroller切换效果

  • 2014年05月21日 17:35
  • 20KB
  • 下载

iOS开发APP瘦身之PDF图片资源加载框架

本文介绍的是一个用于在iOS项目中高效加载PDF矢量图标(尺寸可以无限放大)的工具。我们知道在 Xcode 6 及以上版本可以在 Asset Catalog 中使用 PDF 格式的矢量图资源。 YHP...
  • jiisd
  • jiisd
  • 2016年10月19日 01:06
  • 2190

IOS强制子VIEWCONTROLLER为横屏

  • 2015年06月07日 16:08
  • 152KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS 瘦身ViewController 分离tableViewDataSource
举报原因:
原因补充:

(最多只允许输入30个字)