UIViewController与tableView的dataS

作者: 丨n水瓶座菜虫灬 | 来源:发表于2016-04-01 16:33 被阅读588次

以前当UIViewController有tableView时,经常是UIViewController遵守UITableViewDelegate和UITableViewDataSource,然后在控制器里写要实现的代理方法,以至于很多时候,控制器的代码过多,不利于阅读。为了实现UIViewController与tableView的delegate和dataSource分离开来,今天做了一些小小的尝试,发现是下面的方法是可行的.

  • 创建一个TableViewDelegateObj类,该类遵守UITableViewDelegate和UITableViewDataSource协议,主要完成tableView的delegate和dataSource要做的事.

#import <Foundation/Foundation.h>
#import <UIKit/UIkit.h> typedef void (^SelectCell)(NSIndexPath *indexPath) typedef void (^ConfigCell)(UITableViewCell *cell, NSIndexPath *indexPath) @interface TableViewDelegateObj : NSObject<UITableViewDelegate, UITableViewDataSource>
+ (instancetype)createTableViewDelegateObjWithDataList:(NSMutableArray *)dataList configCellBlock:(ConfigCell)configCellBlock selectCellBlock:(SelectCell)selectCellBlock; @end

#import "TableViewDelegateObj"
@imterface TableViewDelegateObj() @property (nonatomic, strong) NSMutableArray *dataList; @property (nonatomic, copy) SelectCell selectCellBlock; @property (nonatomic, copy) ConfigCell configCellBlock; @end
@implementation TableViewDelegateObj
- (instancetype)initWithDataList:(NSMutableArray *)dataList configCellBlock:(ConfigCell)configCellBlock selectCellBlock:(SelectCell)selectCellBlock { self = [super init]; if (!self) { return nil; } self.dataList = dataList; self.configCellBlock = configCellBlock; self.selectCellBlock = selectCellBlock; }
`+ (instancetype)createTableViewDelegateObjWithDataList:(NSMutableArray *)dataList configCellBlock:(ConfigCell)configCellBlock selectCellBlock:(SelectCell)selectCellBlock {
TableViewDelegateObj *obj = [[self alloc] initWithDataList:dataList configCellBlock:configCellBlock selectCellBlock:selectCellBlock];

return obj;
}- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.dataList.count;
}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
self.configCellBlock(cell, indexPath);
return cell
}- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
self.selectCellBlock(indexPath)
}`

  • 创建好TableViewDelegateObj对象后,在控制器需要使用tableView时,只需要在UIViewController中创建TableViewDelegateObj对象。并在block块中实现配置cell和选中cell的点击事件就行了,值得注意的是,在初始化tableView时,需要把tableView的delegate和dataSource给TableViewDelegateObj对象。

相关文章

网友评论

    本文标题:UIViewController与tableView的dataS

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