// // YJCar.h // 03-tableView-汽车品牌 // // Created by JACKY-MAC on 15-6-24. // Copyright (c) 2015年 www.train.com. All rights reserved. //字典转模型 #import <Foundation/Foundation.h> @interface YJCar : NSObject @property(nonatomic,copy)NSString *icon; @property(nonatomic,copy)NSString *name; - (instancetype)initWithDict:(NSDictionary *)dict; +(instancetype)carWithDict:(NSDictionary *)dict; +(NSArray *)carsWithArray:(NSArray *)array; @end // // HMCar.m // 05-汽车品牌 // // Created by apple on 14-8-19. // Copyright (c) 2014年 itcast. All rights reserved. // #import "HMCar.h" @implementation HMCar - (instancetype)initWithDict:(NSDictionary *)dict { self = [super init]; if (self) { [self setValuesForKeysWithDictionary:dict]; } return self; } + (instancetype)carWithDict:(NSDictionary *)dict { return [[self alloc] initWithDict:dict]; } + (NSArray *)carsWithArray:(NSArray *)array { NSMutableArray *arrayM = [NSMutableArray array]; for (NSDictionary *dict in array) { [arrayM addObject:[self carWithDict:dict]]; } return arrayM; } - (NSString *)description { return [NSString stringWithFormat:@"<%@: %p> {name: %@, icon: %@}", self.class, self,self.name, self.icon]; } @end // // HMCarGroup.h // 05-汽车品牌 // // Created by apple on 14-8-19. // Copyright (c) 2014年 itcast. All rights reserved. // #import <Foundation/Foundation.h> @interface HMCarGroup : NSObject /** 首字母 */ @property (nonatomic, copy) NSString *title; /** 车的数组,存放的是HMCar的模型数据 */ @property (nonatomic, strong) NSArray *cars; - (instancetype)initWithDict:(NSDictionary *)dict; + (instancetype)carGroupWithDict:(NSDictionary *)dict; + (NSArray *)carGroups; @end // // HMCarGroup.m // 05-汽车品牌 // // Created by apple on 14-8-19. // Copyright (c) 2014年 itcast. All rights reserved. // #import "HMCarGroup.h" #import "HMCar.h" @implementation HMCarGroup - (instancetype)initWithDict:(NSDictionary *)dict { self = [super init]; if (self) { // [self setValuesForKeysWithDictionary:dict]; [self setValue:dict[@"title"] forKey:@"title"]; // dict[@"cars"]存放的是字典的数组 // 希望将字典的数组转换成HMCar模型的数组 // [self setValue:dict[@"cars"] forKey:@"cars"]; self.cars = [HMCar carsWithArray:dict[@"cars"]]; } return self; } + (instancetype)carGroupWithDict:(NSDictionary *)dict { return [[self alloc] initWithDict:dict]; } + (NSArray *)carGroups { NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"cars_total.plist" ofType:nil]]; NSMutableArray *arrayM = [NSMutableArray array]; for (NSDictionary *dict in array) { [arrayM addObject:[self carGroupWithDict:dict]]; } return arrayM; } - (NSString *)description { return [NSString stringWithFormat:@"<%@: %p> {title: %@, cars: %@}", self.class, self, self.title, self.cars]; } // // HMViewController.m // 05-汽车品牌 // // Created by apple on 14-8-19. // Copyright (c) 2014年 itcast. All rights reserved. // #import "HMViewController.h" #import "HMCarGroup.h" #import "HMCar.h" @interface HMViewController () <UITableViewDataSource> @property (nonatomic, strong) NSArray *carGroups; @property (nonatomic, strong) UITableView *tableView; @end @implementation HMViewController - (UITableView *)tableView { if (_tableView == nil) { _tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; _tableView.dataSource = self; [self.view addSubview:_tableView]; } return _tableView; } - (NSArray *)carGroups { if (_carGroups == nil) { _carGroups = [HMCarGroup carGroups]; } return _carGroups; } - (void)viewDidLoad { [super viewDidLoad]; // 调用tableView添加到视图 [self tableView]; } #pragma mark - 数据源方法 // 分组总数 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return self.carGroups.count; } // 每一组的总数 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { HMCarGroup *group = self.carGroups[section]; return group.cars.count; } // 单元格 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // 可重用标示符 static NSString *ID = @"Cell"; // 让表格缓冲区查找可重用cell UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; // 如果没有找到可重用cell if (cell == nil) { // 实例化cell cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID]; } // 设置cell内容 // 1> 取出数据模型 HMCarGroup *group = self.carGroups[indexPath.section]; HMCar *car = group.cars[indexPath.row]; // 2> 设置数据 cell.imageView.image = [UIImage imageNamed:car.icon]; cell.textLabel.text = car.name; return cell; } // 标题 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { // 找到group HMCarGroup *group = self.carGroups[section]; return group.title; } // 右侧索引列表 - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { // 索引数组中的"内容",跟分组无关 // 索引数组中的下标,对应的是分组的下标 // return @[@"哇哈哈", @"hello", @"哇哈哈", @"hello", @"哇哈哈", @"hello", @"哇哈哈", @"hello"]; // 返回self.carGroup中title的数组 // NSMutableArray *arrayM = [NSMutableArray array]; // for (HMCarGroup *group in self.carGroups) { // [arrayM addObject:group.title]; // } // return arrayM; // KVC是cocoa的大招 // 用来间接获取或者修改对象属性的方式 // 使用KVC在获取数值时,如果指定对象不包含keyPath的"键名",会自动进入对象的内部查找 // 如果取值的对象是一个数组,同样返回一个数组 NSArray *array = [self.carGroups valueForKeyPath:@"cars.name"]; NSLog(@"%@", array); return [self.carGroups valueForKeyPath:@"title"]; } @end
时间: 2024-08-09 00:37:31