viewcontroller瘦身之一(轉載)

在一個IOS項目中,viewcontroller一般是最大的文件,而且包含了許多沒必要要的代碼,重用率是最低的。sublime-text

咱們能夠嘗試給viewcontroller瘦身,讓他看起來不是那麼的臃腫。數組

今天說到的是,UITableViewDataSource。框架

UITableview多是平時寫項目中用到的最多的組件了,使用它要實現它的代理協議和數據源方法,每次都是那麼些東西方法controller中,看起來不舒服,咱們能夠給他瘦身一下。好比這樣作。ide

由於datasource基本上是圍繞數組去作一些事,更針對的說就是圍繞viewcontroller的數據數組做一些事情,咱們能夠把它抽出來,單獨的放在一個類中,咱們使用一個block來設置cell,也能夠使用delegate來作這件事,這徹底取決於你。工具

下面上代碼,舉個栗子~atom

 1 //
 2 //  ArrayDataSource.h
 3 //  LrdBasicFramework
 4 //
 5 //  Created by 鍵盤上的舞者 on 5/21/16.
 6 //  Copyright © 2016 鍵盤上的舞者. All rights reserved.
 7 //  封裝的一個dataSource類,能夠使controller更加的輕量級
 8  
 9 #import <Foundation/Foundation.h>
10  
11 typedef void(^TableViewCellConfigureBlock)(id cell, id item);
12  
13 @interface ArrayDataSource : NSObject <UITableViewDataSource>
14  
15 - (id)initWithItems:(NSArray *)items
16      cellIdentifier:(NSString *)identifier
17      configureBlock:(TableViewCellConfigureBlock)configureBlock;
18  
19 - (id)itemAtIndexPath:(NSIndexPath *)indexPath;
20  
21 @end
 1 //
 2 //  ArrayDataSource.m
 3 //  LrdBasicFramework
 4 //
 5 //  Created by 鍵盤上的舞者 on 5/21/16.
 6 //  Copyright © 2016 鍵盤上的舞者. All rights reserved.
 7 //
 8  
 9 #import "ArrayDataSource.h"
10  
11 @interface ArrayDataSource ()
12  
13 @property (nonatomic, strong) NSArray *items;
14 @property (nonatomic, copy) NSString *identifier;
15 @property (nonatomic, copy) TableViewCellConfigureBlock configureBlock;
16  
17 @end
18  
19 @implementation ArrayDataSource
20  
21 - (instancetype)init {
22     return nil;
23 }
24  
25 - (id)initWithItems:(NSArray *)items cellIdentifier:(NSString *)identifier configureBlock:(TableViewCellConfigureBlock)configureBlock {
26     self = [super init];
27     if (self) {
28         self.items = items;
29         self.identifier = identifier;
30         self.configureBlock = configureBlock;
31     }
32     return self;
33 }
34  
35 - (id)itemAtIndexPath:(NSIndexPath *)indexPath {
36     return self.items[(NSUInteger) indexPath.row];
37 }
38  
39 #pragma mark - DataSource
40 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
41     return self.items.count;
42 }
43  
44 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
45     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:self.identifier forIndexPath:indexPath];
46     id item = [self itemAtIndexPath:indexPath];
47     self.configureBlock(cell, item);
48     return cell;
49 }
50 @end

而後咱們能夠在viewcontroller中來這樣使用它spa

相關文章
相關標籤/搜索