模型法创建表视图

在以前的学习中,掌握的是对于做一个页面框架的开发方式无非是有以下几种:

  (1)纯代码 + StoryBoard混合 开发  (故事板开发是苹果极力推崇的,因为创建比较简单,速度快)

  (2)纯代码 (适用于公司团队合作的开发)

    (3) 纯代码 + xib混合 (xib与故事板没有什么区别)

 

在今天看别人的博客的时候,知道纯代码创建页面框架还包括:纯代码 + 模型 思想 . 

下面是参照学习的结果:以创建表视图为例

 

页面框架如下 :

 

 

代码实现如下 :

 

结构如下:

 

 

 1 #import "SettingItem.h"
 2 
 3 @implementation SettingItem
 4 
 5 //类方法创建对象
 6 + (instancetype)itemWithtitle:(NSString *)title{
 7     
 8     SettingItem *item = [[SettingItem alloc]init];
 9     item.title = title;
10     
11     return item;
12     
13 }

 

控制器继承UITableViewController:

 

  1 #import "ViewController.h"
  2 #import "GroupItem.h"
  3 #import "SettingItem.h"
  4 
  5 @interface ViewController ()
  6 
  7 
  8 //表视图的组数
  9 @property (nonatomic,strong)NSMutableArray *groups;
 10 
 11 @end
 12 
 13 
 14 //"设置"页面
 15 @implementation ViewController
 16 
 17 - (void)viewDidLoad {
 18     [super viewDidLoad];
 19     
 20     //添加第1组模型
 21     [self setGroup1];
 22     //添加第2组模型
 23     [self setGroup2];
 24     //添加第3组模型
 25     [self setGroup3];
 26     
 27     
 28     
 29 }
 30 
 31 
 32 //数据的懒加载
 33 - (NSMutableArray *)groups{
 34     
 35     //不存在再创建
 36     if (_groups == nil) {
 37         
 38         _groups = [NSMutableArray array];
 39         
 40     }
 41     return _groups;
 42     
 43 }
 44 
 45 
 46 //设置表视图的分组样式
 47 - (instancetype)init{
 48     
 49     return [self initWithStyle:UITableViewStyleGrouped];
 50 }
 51 
 52 
 53 - (void)setGroup1{
 54     // 创建组模型
 55     GroupItem *group = [[GroupItem alloc]init];
 56     // 创建行模型
 57     SettingItem *item = [SettingItem itemWithtitle:@"我的账号"];
 58     SettingItem *item1 = [SettingItem itemWithtitle:@"我的收藏"];
 59     
 60     // 保存行模型数组
 61     group.items = @[item,item1];
 62     // 把组模型保存到groups数组
 63     [self.groups addObject:group];
 64 }
 65 
 66 - (void)setGroup2{
 67     
 68     GroupItem *group = [[GroupItem alloc]init];
 69     
 70     SettingItem *item = [SettingItem itemWithtitle:@"我去好评"];
 71     SettingItem *item1 = [SettingItem itemWithtitle:@"我去吐槽"];
 72     
 73     group.items = @[item,item1];
 74     
 75     [self.groups addObject:group];
 76 }
 77 
 78 - (void)setGroup3{
 79     
 80     GroupItem *group = [[GroupItem alloc]init];
 81     
 82     SettingItem *item = [SettingItem itemWithtitle:@"关注我们"];
 83     SettingItem *item1 = [SettingItem itemWithtitle:@"关于我们"];
 84     
 85     group.items = @[item,item1];
 86     
 87     [self.groups addObject:group];
 88 }
 89 
 90 
 91 #pragma mark - TableView的数据源代理方法实现
 92 
 93 /**
 94  *  返回有多少组的代理方法
 95  */
 96 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
 97     
 98     return self.groups.count;
 99 }
100 /**
101  *  返回每组有多少行的代理方法
102  */
103 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
104     
105     GroupItem *group = self.groups[section];
106     return group.items.count;
107 }
108 
109 /**
110  *  返回每一行Cell的代理方法
111  */
112 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
113     
114     // 1 初始化Cell
115     // 1.1 设置Cell的重用标识
116     static NSString *ID = @"cell";
117     // 1.2 去缓存池中取Cell
118     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
119     // 1.3 若取不到便创建一个带重用标识的Cell
120     if (cell == nil) {
121         cell  = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
122     }
123     // 设置Cell右边的小箭头
124     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
125     
126     // 2 设置数据
127     // 2.1 取出组模型
128     GroupItem *group = self.groups[indexPath.section];
129     // 2.2 根据组模型取出行(Cell)模型
130     SettingItem *item = group.items[indexPath.row];
131     // 2.3 根据行模型的数据赋值
132     cell.textLabel.text = item.title;
133     
134     return cell;
135 }

 

我还是比较喜欢故事板和代码结合使用.毕竟对于项目来说,如果页面框架差不多,可以复用框架,复制代码即可.重用度更高!

 

UITableViewController的使用 :

创建UITableViewController不需要设置代理和方法,创建的时候,协议方法会自动写出来,不需要自己写.只需要简单设置即可.

 

posted on 2015-10-10 20:44  玉思盈蝶  阅读(227)  评论(0编辑  收藏  举报

导航