前言: 为控制器瘦身,本文提供一个抽出数据源代理的示例,具体请结合自身的需求定制。抽出数据源代理不是必须的,如果控制器不臃肿就没必要了,因为抽出数据源代理会增加类,而且还可能复杂化工程。
MZTableViewDataSource.h
#import <UIKit/UIKit.h>
@interface MZTableViewDataSource : NSObject <UITableViewDataSource>
/** 配置第一次加载的数据,设置复用标记 */
- (instancetype)initWithOriginalList:(NSArray *)list cellIdentifier:(NSString *)cellIdentifier;
/** 当加载更多 或 刷新数据的时候用 */
- (void)reloadDataSourceWithArray:(NSArray *)array;
@end
MZTableViewDataSource.m
#import "MZTableViewDataSource.h"
//Views
#import "MZTableViewCell.h"
@interface MZTableViewDataSource ()
@property (nonatomic, strong) NSArray *dataList;
@property (nonatomic, copy) NSString *cellIdentifier;
@end
@implementation MZTableViewDataSource
/** 配置第一次加载的数据,设置复用标记 */
- (instancetype)initWithOriginalList:(NSArray *)list cellIdentifier:(NSString *)cellIdentifier {
if (self = [super init]) {
self.dataList = list;
self.cellIdentifier = cellIdentifier;
}
return self;
}
/** 当加载更多 或 刷新数据的时候用 */
- (void)reloadDataSourceWithArray:(NSArray *)array {
self.dataList = array;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.dataList.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MZTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:self.cellIdentifier];
cell.model = self.dataList[indexPath.row];
return cell;
}
@end
ViewController.m
#import "ViewController.h"
#import "DataModel.h"
#import "MZTableViewDataSource.h"
#import "MZTableViewCell.h"
@interface ViewController ()<UITableViewDelegate>
@property (weak, nonatomic) IBOutlet UITableView *mTableView;
@property (nonatomic, strong) MZTableViewDataSource *dataSource;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.mTableView registerNib:[UINib nibWithNibName:NSStringFromClass([MZTableViewCell class]) bundle:nil] forCellReuseIdentifier:NSStringFromClass([MZTableViewCell class])];
self.mTableView.rowHeight = UITableViewAutomaticDimension;
self.dataSource = [[MZTableViewDataSource alloc] initWithOriginalList:[self loadDataFromPlist] cellIdentifier:NSStringFromClass([MZTableViewCell class])];
self.mTableView.dataSource = self.dataSource;
}
- (NSArray *)loadDataFromPlist {
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"DATA.plist" ofType:nil]];
NSMutableArray *result = [NSMutableArray array];
for (NSDictionary *object in dict[@"data"]) {
[result addObject:[[DataModel alloc] initWithDictionary:object]];
}
return result;
}
#pragma mark - delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
}
@end
网友评论