• iOS学习


    //
    //  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
    
  • 相关阅读:
    虚方法的调用是怎么实现的(单继承VS多继承)
    C++ Data Member内存布局
    删除单链表,你会吗?
    最近面试遇到的Windows相关的题目
    C# 文章导航
    移动端开发文章导航
    Vue源码阅读(一) 准备工作
    vue-router源码阅读(一) 内部探究
    Vuex源码阅读(二) store内的getters实现逻辑
    Vuex源码阅读(一) new Vuex.Store()内部探究
  • 原文地址:https://www.cnblogs.com/yejian/p/4766816.html
Copyright © 2020-2023  润新知