self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, HEIGHT) style:UITableViewStyleGrouped];
代码验证示例如下:
新建一个具有simple View的工程
首先在Supporting files文件夹下新建一个plist文件,编辑内容如下:
用记事本打开,其实是一个xml文件,如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <array> <dict> <key>cars</key> <array> <string>奥迪</string> <string>宝马</string> <string>奔驰</string> <string>保时捷</string> <string>大众</string> </array> <key>title</key> <string>德系品牌</string> <key>desc</key> <string>高端大方上档次,世界一流品牌</string> </dict> <dict> <key>cars</key> <array> <string>本田</string> <string>丰田</string> <string>铃木</string> <string>雷克萨斯</string> <string>马自达</string> <string>日产</string> <string>三菱</string> <string>现代</string> </array> <key>title</key> <string>日韩品牌</string> <key>desc</key> <string>牛逼哄哄,哎哟,好像不错</string> </dict> <dict> <key>cars</key> <array> <string>别克</string> <string>福特</string> <string>Jeep</string> <string>凯迪拉克</string> <string>林肯</string> <string>雪佛兰</string> </array> <key>title</key> <string>美系品牌</string> <key>desc</key> <string>老牌汽车,复古风</string> </dict> <dict> <key>cars</key> <array> <string>标致</string> <string>雪铁龙</string> <string>宾利</string> <string>捷豹</string> <string>路虎</string> <string>劳斯莱斯</string> <string>法拉利</string> <string>兰博基尼</string> <string>玛莎拉蒂</string> </array> <key>title</key> <string>欧系其他</string> <key>desc</key> <string>优雅高贵,你值得拥有</string> </dict> <dict> <key>cars</key> <array> <string>比亚迪</string> <string>奔腾</string> <string>北京汽车</string> <string>长城</string> <string>东南</string> <string>东风</string> </array> <key>title</key> <string>自主品牌</string> <key>desc</key> <string>Made In China,质量你懂的</string> </dict> </array> </plist>
在Supporting下根据plist文件内的字典属性新建model类型的类 Group
编辑Group.h如下:
// // group.h // 通过加载plist文件来展示分组数据 // // Created by apple on 15/8/31. // Copyright (c) 2015年 LiuXun. All rights reserved. // #import <Foundation/Foundation.h> @interface Group : NSObject @property (nonatomic, strong) NSArray *cars; @property (nonatomic, strong) NSString *title; @property (nonatomic, strong) NSString *desc; -(instancetype) initWithDict:(NSDictionary *)dict; +(instancetype) groupWithDict:(NSDictionary *)dict; @end编辑Group.m如下:
// // group.m // 通过加载plist文件来展示分组数据 // // Created by apple on 15/8/31. // Copyright (c) 2015年 LiuXun. All rights reserved. // #import "group.h" @implementation Group -(instancetype) initWithDict:(NSDictionary *)dict { if (self = [super init]) { // 第一种方式 // self.desc = dict[@"desc"]; // self.title = dict[@"title"]; // self.cars = dict[@"cars"]; // 第二种方式KVC [self setValuesForKeysWithDictionary:dict]; } return self; } +(instancetype) groupWithDict:(NSDictionary *)dict { return [[self alloc] initWithDict:dict]; } @end编辑控制器类的.h文件如下:
// // ViewController.h // 通过加载plist文件来展示分组数据 // // Created by apple on 15/8/31. // Copyright (c) 2015年 LiuXun. All rights reserved. // #import <UIKit/UIKit.h> @interface ViewController : UIViewController <UITableViewDataSource> @property (nonatomic, strong) NSArray *groups; @property (nonatomic, strong) UITableView *tableView; @end编辑控制器类的.m文件如下:
// // ViewController.m // 通过加载plist文件来展示分组数据 // // Created by apple on 15/8/31. // Copyright (c) 2015年 LiuXun. All rights reserved. // #import "ViewController.h" #import "group.h" #define WIDTH [UIScreen mainScreen].bounds.size.width #define HEIGHT [UIScreen mainScreen].bounds.size.height @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 新建一个UITableView组件 self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, HEIGHT) style:UITableViewStyleGrouped]; //分配空间的同时设置分组风格 self.tableView.dataSource = self; // 设置当前控制器为数据源对象 [self.view addSubview:self.tableView]; NSLog(@"%@",self.groups); } // 重写数组groups的get方法实现懒加载,将字典转为模型 -(NSArray *)groups { if (_groups == nil) { // 在app在手机安装的根目录下寻找plist文件的路径 NSString *path = [[NSBundle mainBundle] pathForResource:@"cars_simple.plist" ofType:nil]; // 读取文件的内容到一个数组 NSArray *arrayDict = [NSArray arrayWithContentsOfFile:path]; // 新建一个可变数组。用来存放每一个字典对象装换后的model对象 NSMutableArray *modelGroup = [NSMutableArray array]; // 空的可变数组 // 遍历从文件读取出来的字典数组,把每一个字典转换成model存放到可变数组modelGroup中 for (NSDictionary * dict in arrayDict) { Group *group = [Group groupWithDict:dict]; [modelGroup addObject:group]; } _groups = modelGroup; } return _groups; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } // 当前UITableView分为多少组 -(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView { return self.groups.count; // 数组的(字典——>模型)对象个数就是组数 } // 每一组分为多少行 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // 先获取组的对象 Group *group = self.groups[section]; return group.cars.count; } // 每一组每一行显示什么内容 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // 新建表格对象 UITableViewCell * cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; // 获取组模型数据 Group *group = self.groups[indexPath.section]; // 用模型数据设置表格Cell属性 cell.textLabel.text = group.cars[indexPath.row]; return cell; } // 添加组标题描述 -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { // 获取model对象 Group *group = self.groups[section]; return group.title; } // 添加组尾描述 -(NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section { // 获取model对象 Group *group = self.groups[section]; return group.desc; } @end运行结果如下: