iphone开发之表格组件UITableView的使用(六)通过加载plist文件展示汽车品牌并添加索引查找

本文主要是介绍iphone开发之表格组件UITableView的使用(六)通过加载plist文件展示汽车品牌并添加索引查找,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、
*使用cars_total.plist
*模型嵌套模型
**注意:这里使用的是嵌套模型,所以不能直接使用KVC了。需要通过把字典转模型的代码封装到Group模型中。
二、
*实现右侧的索引栏
*通过实现数据源协议-(NSArray *)sectionIndexTitlesForTabView:(UITableView *)tableView
*点击右侧索引栏中的文字,会根据索引的顺序跳转到左侧对应的位置
*获取右侧group数组中每个对象的title值,并返回到一个NSArray中。[self.groups  valueForKeyPath:@“title”];
三、注意:
一个包含对象的数组array,调用valueForKeyPath方法后会把指定键的所有值放到一个新的数组中。 例如:
NSArray  *arr = [array valueForKeyPath:@“name”];
 ***因为array本身没有name属性,所以以上方法调用,会返回array这个数组中的每个元素对象的name属性的值,会把这些name放到一个新的NSArray中返回。******

代码验证示例如下:plist文件如下:


新建工程,

编辑Car.h如下:

//
//  CZCar.h
//  通过plist文件展现汽车品牌
//
//  Created by apple on 15/9/1.
//  Copyright (c) 2015年 LiuXun. All rights reserved.
//#import <Foundation/Foundation.h>@interface CZCar : NSObject
@property (nonatomic, strong) NSString * icon;
@property (nonatomic, strong) NSString *name;-(instancetype)initWithDict:(NSDictionary *) dict;
+(instancetype ) carWithDict: (NSDictionary *) dict;
@end
编辑CZCar.m如下:

//
//  CZCar.m
//  通过plist文件展现汽车品牌
//
//  Created by apple on 15/9/1.
//  Copyright (c) 2015年 LiuXun. All rights reserved.
//#import "CZCar.h"@implementation CZCar
-(instancetype)initWithDict:(NSDictionary *) dict
{if (self = [super  init]) {
//        self.name = dict[@"name"];
//        self.icon = dict[@"icon"];// 因为dict字典对象的数据元素都是基本类型,可以直接用KVC[self setValuesForKeysWithDictionary:dict];}return self;
}
+(instancetype ) carWithDict: (NSDictionary *) dict
{return [[self alloc] initWithDict:dict];
}
@end
编辑CZGroup.h如下:

//
//  CZGroup.h
//  通过plist文件展现汽车品牌
//
//  Created by apple on 15/9/1.
//  Copyright (c) 2015年 LiuXun. All rights reserved.
//#import <Foundation/Foundation.h>
#import "CZCar.h"
@interface CZGroup : NSObject
@property (nonatomic, strong) NSArray * cars;
@property (nonatomic, strong) NSString *title;-(instancetype) initWithDict:(NSDictionary *)dict;
+(instancetype) groupWithDict:(NSDictionary *)dict;@end
编辑CZGroup.m如下:

//
//  CZGroup.m
//  通过plist文件展现汽车品牌
//
//  Created by apple on 15/9/1.
//  Copyright (c) 2015年 LiuXun. All rights reserved.
//#import "CZGroup.h"@implementation CZGroup
-(instancetype) initWithDict:(NSDictionary *)dict
{if (self = [super init]) {
//        self.name = dict[@"title"];
//        self.cars = dict[@"cars"];  // 因为cars是个字典,要进行模型装换[self setValuesForKeysWithDictionary:dict];  // 相当于给普通数据赋值// 当有模型嵌套的时候需要手动把字典转为模型// 创建一个用来保存模型的数组NSMutableArray *arrayModels = [NSMutableArray array];// 手动做一下模型转换for(NSDictionary * item_dict  in  dict[@"cars"]) // cars也是一个字典数组{ // 注意:声明的迭代项目不能和后面的集合名相同CZCar *car = [CZCar carWithDict:item_dict];[arrayModels addObject:car];}self.cars = arrayModels;}return self;
}
+(instancetype) groupWithDict:(NSDictionary *)dict
{return [[self alloc ]initWithDict:dict];
}@end

编辑控制器的.h文件:

//
//  ViewController.h
//  通过plist文件展现汽车品牌
//
//  Created by apple on 15/9/1.
//  Copyright (c) 2015年 LiuXun. All rights reserved.
//#import <UIKit/UIKit.h>
#import "CZGroup.h"
@interface ViewController : UIViewController <UITableViewDataSource,UITableViewDelegate>
@property (nonatomic, strong) NSArray * groups;  // 保存所有的数据
@property (nonatomic, strong) UITableView *tableView; 
@end
编辑控制器的.m如下:

//
//  ViewController.m
//  通过plist文件展现汽车品牌
//
//  Created by apple on 15/9/1.
//  Copyright (c) 2015年 LiuXun. All rights reserved.
//#import "ViewController.h"
#define  WIDTH      [UIScreen mainScreen].bounds.size.width
#define   HEIGHT  [UIScreen mainScreen].bounds.size.height@interface ViewController ()@end@implementation ViewController// 重写groups的get方法实现懒加载
-(NSArray *)groups
{if (_groups == nil) {// 在app安装的根目录下获取指定plist文件的路径NSString *path = [[NSBundle mainBundle] pathForResource:@"cars_total.plist" ofType:nil];// 读取文件内容到一个数组NSArray * arrayDicts = [NSArray arrayWithContentsOfFile:path];// 创建一个保存模型对象的可变数组NSMutableArray *arrayModels = [NSMutableArray array];// 遍历字典数组,将字典转为对象模型并存入存放模型对象的可变数组for(NSDictionary *dict  in arrayDicts){// 新建model对象CZGroup *group = [CZGroup  groupWithDict:dict];[arrayModels addObject:group];}_groups = arrayModels;}return _groups;
}- (void)viewDidLoad
{[super viewDidLoad];//为UItableView组建设置属性self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, HEIGHT) style:UITableViewStyleGrouped];self.tableView.dataSource = self;// 当每一行高度相同的情况下,可用以下属性设置self.tableView.rowHeight = 60;[self.view addSubview:self.tableView];}// 利用代理中的方法取消状态栏
-(BOOL) prefersStatusBarHidden
{return  YES;
}// 分为多少组
-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{return self.groups.count;
}// 每一组多行
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{// 获取模型数据CZGroup * group = self.groups[section];return group.cars.count;
}// 每一组每一行是什么单元格内容
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{// 1 获取模型数据// 根据组的索引获取组的模型CZGroup *group = self.groups[indexPath.section];// 根据当前行的索引,获取对应组的对应行的车CZCar *car = group.cars[indexPath.row];// 2 创建单元格// 2.1 声明一个重用IDstatic NSString *ID = @"Car_Cell";// 2.2  根据重用ID去缓存池中获取对应的CellUITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:ID];// 2.3 如果没有获取到,那么就创建一个具有重用ID的单元格if (cell == nil) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];}// 设置单元格内容cell.imageView.image = [UIImage imageNamed:car.icon];cell.textLabel.text = car.name;return cell;
}// 添加数据源协议中的方法,实现添加表头
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{// 获取组模型CZGroup *group = self.groups[section];return  group.title;
}// 利用代理中的方法添加右侧索引标题栏
-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
//    NSMutableArray *arrayIndex = [NSMutableArray array];
//    for(CZGroup *group in self.groups)
//    {
//        [arrayIndex addObject:group.title];
//    }
//    return arrayIndex;
//    return [self.groups valueForKeyPath:@"title"];
}
- (void)didReceiveMemoryWarning
{[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}@end

运行结果如下:







这篇关于iphone开发之表格组件UITableView的使用(六)通过加载plist文件展示汽车品牌并添加索引查找的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115291

相关文章

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

关于pandas的read_csv方法使用解读

《关于pandas的read_csv方法使用解读》:本文主要介绍关于pandas的read_csv方法使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录pandas的read_csv方法解读read_csv中的参数基本参数通用解析参数空值处理相关参数时间处理相关

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

SpringBoot条件注解核心作用与使用场景详解

《SpringBoot条件注解核心作用与使用场景详解》SpringBoot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键,本文将系统梳理所有常用的条件注... 目录引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、@ConditionalOn

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳