iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序

iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序

一、plist文件和项目结构图

说明:这是一个嵌套模型的示例

二、代码示例:

 YYcarsgroup.h文件代码:

复制代码
 1 //2 //  YYcarsgroup.h3 //  07-汽车展示(高级)4 //5 //  Created by apple on 14-5-28.6 //  Copyright (c) 2014年 itcase. All rights reserved.7 //8 9 #import <Foundation/Foundation.h>
10 
11 @interface YYcarsgroup : NSObject
12 @property(nonatomic,copy)NSString *title;
13 @property(nonatomic,strong)NSArray *cars;
14 
15 -(instancetype)initWithDict:(NSDictionary *)dict;
16 +(instancetype)carsgroupWithDict:(NSDictionary *)dict;
17 @end
复制代码

YYcarsgroup.m文件代码:

复制代码
 1 //2 //  YYcarsgroup.m3 //  07-汽车展示(高级)4 //5 //  Created by apple on 14-5-28.6 //  Copyright (c) 2014年 itcase. All rights reserved.7 //8 9 #import "YYcarsgroup.h"
10 #import "YYcars.h"
11 
12 @implementation YYcarsgroup
13 -(instancetype)initWithDict:(NSDictionary *)dict
14 {
15     if (self=[super init]) {
16         //嵌套的字典转模型
17         self.title=dict[@"title"];
18         
19         //注意
20         NSArray *dictcars=dict[@"cars"];
21         //像下面这样写可以提高性能
22         NSMutableArray *arrayM=[NSMutableArray arrayWithCapacity:dictcars.count];
23         for (NSDictionary *dict  in dictcars) {
24             YYcars *yycars=[[YYcars alloc]initWithDict:dict];
25             [arrayM addObject:yycars];
26         }
27          // 赋值存储模型的数组给属性
28         self.cars=arrayM;
29     }
30     return self;
31 }
32 
33 +(instancetype)carsgroupWithDict:(NSDictionary *)dict
34 {
35     return [[self alloc]initWithDict:dict];
36 }
37 @end
复制代码

YYcars.h文件

复制代码
 1 //2 //  YYcars.h3 //  07-汽车展示(高级)4 //5 //  Created by apple on 14-5-28.6 //  Copyright (c) 2014年 itcase. All rights reserved.7 //8 9 #import <Foundation/Foundation.h>
10 
11 @interface YYcars : NSObject
12 @property(nonatomic,copy)NSString *name;
13 @property(nonatomic,copy)NSString *icon;
14 
15 -(instancetype)initWithDict:(NSDictionary *)dict;
16 +(instancetype)carsWithDict:(NSDictionary *)dict;
17 @end
复制代码

 YYcars.m文件

复制代码
 1 //2 //  YYcars.m3 //  07-汽车展示(高级)4 //5 //  Created by apple on 14-5-28.6 //  Copyright (c) 2014年 itcase. All rights reserved.7 //8 9 #import "YYcars.h"
10 
11 @implementation YYcars
12 
13 -(instancetype)initWithDict:(NSDictionary *)dict
14 {
15     if (self=[super init]) {
16         self.name=dict[@"name"];
17         self.icon=dict[@"icon"];
18     }
19     return self;
20 }
21 +(instancetype)carsWithDict:(NSDictionary *)dict
22 {
23     return [[self alloc]initWithDict:dict];
24 }
25 @end
复制代码

YYViewController.m文件

复制代码
  1 //2 //  YYViewController.m3 //  07-汽车展示(高级)4 //5 //  Created by apple on 14-5-28.6 //  Copyright (c) 2014年 itcase. All rights reserved.7 //8 9 #import "YYViewController.h"10 #import "YYcarsgroup.h"11 #import "YYcars.h"12 13 @interface YYViewController ()<UITableViewDataSource>14 @property (strong, nonatomic) IBOutlet UITableView *tableview;15 @property(nonatomic,strong) NSArray *car;16 @end17 18 @implementation YYViewController19 20 - (void)viewDidLoad21 {22     [super viewDidLoad];23     24     self.tableview.rowHeight=60.f;25     self.tableview.dataSource=self;26     NSLog(@"%d",self.car.count);27 }28 #pragma mark- 实现懒加载29 //1.从包中读取数据30 //2.字典转模型31 //3.返回cars32 -(NSArray *)car33 {34     if (_car==nil) {35       36         NSString *fullpath= [[NSBundle mainBundle]pathForResource:@"cars_total.plist" ofType:nil];37         NSArray  *arrayM=[NSArray arrayWithContentsOfFile:fullpath];38         39         NSMutableArray *carsarray=[NSMutableArray array];40         for (NSDictionary  *dict in arrayM) {41             YYcarsgroup *carsgroup=[YYcarsgroup carsgroupWithDict:dict];42             [carsarray addObject:carsgroup];43         }44         _car=[carsarray copy];45     }46     return _car;47 }48 49 50 #pragma mark-  实现tableview的数据展示51 //1.设置数据源,遵守协议52 //2.返回组53 //3.返回行54 //4.每组每行对应的数据55 //4.1去缓存中去取cell56 //4.2若没有,则创建cell,并盖章57 //4.3设置cell的数据58 //4.4返回cell59 60 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView61 {62     return self.car.count;63 }64 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section65 {66     YYcarsgroup *carsgroup=self.car[section];67     return carsgroup.cars.count;68 }69 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath70 {71     static NSString *identifier=@"car";72     //4.1去缓存中去取cell73     UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier];74     //4.2若没有,则创建cell,并盖章75     if (cell==nil) {76         cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];77     }78     //4.3设置cell的数据79     //设置对应的组80     YYcarsgroup *carsgroup=self.car[indexPath.section];81     //设置对应的行82     YYcars *yycars=carsgroup.cars[indexPath.row];83 84     cell.imageView.image=[UIImage imageNamed:yycars.icon];85     cell.textLabel.text=yycars.name;86     //4.4返回cell87     return cell;88 }89 90 //设置每组的标题91 -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section92 {93     YYcarsgroup *carsgroup=self.car[section];94     return carsgroup.title;95 }96 97 //设置索引98 -(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView99 {
100     //利用kvc取出所有的标题
101     NSArray *title=[self.car  valueForKeyPath:@"title"];
102     return title;
103 }
104 
105 //隐藏状态栏
106 -(BOOL)prefersStatusBarHidden
107 {
108     return  YES;
109 }
110 @end
复制代码

实现效果:

三、注意点

1.设置索引

代码如下:

复制代码
//设置索引
-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{//利用kvc取出所有的标题NSArray *title=[self.car  valueForKeyPath:@"title"];return title;
}
复制代码

2.cell的性能优化

代码如下:

复制代码
   static NSString *identifier=@"car";//4.1去缓存中去取cellUITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier];//4.2若没有,则创建cell,并盖章if (cell==nil) {cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];}
复制代码

请注意:cell内部数据处理的细节。(如何节省内存?)

 

转载于:https://www.cnblogs.com/sunflower-lhb/p/4900840.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

awb数据怎么计算_白平衡自己主动(AWB)算法---2,颜色计算

本文说明了白平衡算法估计当前场景的色温过程.色温计算的原理并不复杂,但要做到,还是一道&#xff0c;认真做好每一步,这需要大量的测试,和算法一直完好.关于该过程首先简要:1, 取的图像数据,并划分MxN块,如果是25x25,并统计每一块的基本信息(,白色像素的数量及R/G/B通道的分量…

svn强制要求提交注释

2019独角兽企业重金招聘Python工程师标准>>> 看了N多资料&#xff0c;不知道为什么我总是不成功。现在终于测试成功了&#xff0c;下面是实际操作过程~~ 使用bitnami一键安装了subversion&#xff0c;在使用中&#xff0c;希望开发人员提交时必须输入日志内容&#…

Xamarin效果第五篇之ScrollView动态滚动效果

前面基于Xamarin做了一点效果;这不过年从老家回来一直成沉迷工作无法自拔,没时间来更新文章了;今天赶紧抽点时间再来更新一下效果;直接看看最终实现的效果:前台RadioButton的事件绑定选中状态绑定:后台对ScrollView的滚动处理:ScrollView的滚动对当前选中状态的修改&#xff1a…

9 个使用前必须再三小心的 Linux 命令

Linux shell/terminal 命令非常强大即使一个简单的命令就可能导致文件夹、文件或者路径文件夹等被删除。 在一些情况下Linux 甚至不会询问你而直接执行命令导致你丢失各种数据信息。 一般来说在 Web 上推荐新的 Linux 用户执行这些命令当然也有人哪些写过这代码的人不这么想因为…

池化层在全连接层之间吗,了解最大池化层之后的全连接层的尺寸

In the diagram (architecture) below, how was the (fully-connected) dense layer of 4096 units derived from last max-pool layer (on the right) of dimensions 256x13x13? Instead of 4096, shouldnt it be 256*13*1343264 ?解决方案If Im correct, youre asking why …

Blazor University (3)组件 — 创建组件

原文链接&#xff1a;https://blazor-university.com/components组件所有呈现的 Blazor 视图都来自 ComponentBase 类&#xff0c;这包括布局、页面和组件。Blazor 页面本质上是一个带有 page 指令的组件&#xff0c;该指令指定浏览器必须导航到的 URL 才能呈现它。事实上&…

Codeigniter中创建LeanCloud云函数实现微信支付

2019独角兽企业重金招聘Python工程师标准>>> 经过摸索&#xff0c;与官方提供的slim无异&#xff0c;同样使用__invoke魔法函数即可&#xff0c;步骤如下&#xff1a; 1.config.php打开hook&#xff0c;即设置$config[enable_hooks] TRUE; 详情文档参见&#xff1a…

用蒙特卡洛方法计算派-python和R语言

用蒙特卡洛方法算pi&#xff0d;基于python和R语言 最近follow了MOOC上一门python课&#xff0c;开始学Python。同时&#xff0c;买来了概率论与数理统计&#xff0c;准备自学一下统计。&#xff08;因为被鄙视过不是统计专业却想搞数据分析&#xff09; 有趣的是书里面有一块讲…

51单片机智能小车循迹完整程序_电气与信息工程学院双创协会开展循迹小车培训...

为培养青年学子创新意识和创新能力&#xff0c;激发勇于创新的主动性和积极性&#xff0c;营造良好科技创新氛围&#xff0c;10月29日至30日&#xff0c;电气与信息工程学院双创协会于一教609、三教102和三教202开展循迹小车培训&#xff0c;该培训由电子1841班游碧文和电子184…

AdonisUI - 用于 WPF 应用程序的轻量级 UI 工具包,提供经典但增强的 Windows 视觉效果...

介绍用于 WPF 应用程序的轻量级 UI 工具包&#xff0c;提供经典和增强的 Windows 视觉效果几乎所有 WPF 控件的默认样式和模板可根据需要使用的其他样式以方便使用两种配色方案&#xff08;浅色和深色&#xff09;也可用于自定义样式支持在运行时更改配色方案支持其他自定义配色…

Internet概念与TCP/ IP分层模型

Internet是世界上规模最大、用户最多、影响最大的计算机互联网络。本模块介绍Internet的概念及TCP/ IP分层模型。 一、Internet的概念 Internet的概念&#xff08;也可认为是Internet的结构&#xff09;可以从以下几个方面理解&#xff1a; 从网络通信的观点来看&#xff0c;In…

数据结构关键路径_数据结构与算法之关键路径_一点课堂(多岸学院)

关键路径梳理活动的顺序仅仅是拓扑排序可以完成的功能之一&#xff0c;更有价值的是估量完成整个事件的最短时间。比如生产一辆汽车&#xff0c;虽然安排员工、准备原始材料是先行条件&#xff0c;但是组装各种零部件是可以同时进行的&#xff0c;例如制造轮子和发动机、外壳等…

ARP-Address Resolution Protocol-地址解析协议

主要内容摘自&#xff1a;图解TCP/IP ARP是一种解决地址问题的协议。以目标IP地址为线索&#xff0c;用来定位下一个应该接受数据分包的网络设备的mac地址。 如果目标主机不在同一个链路上时&#xff0c;可以通过ARP查找下一跳路由器的MAC地址。 不过ARP只适用于IPv4&#xff0…

WPF 实现音频播放动画控件

WPF开发者QQ群此群已满340500857 &#xff0c;请加新群458041663由于微信群人数太多入群请添加小编微信号yanjinhuawechat 或 W_Feng_aiQ 邀请入群需备注WPF开发者 01—代码如下一、创建AnimationAudio.xaml代码如下。<ResourceDictionary xmlns"http://schemas.micros…

#51CTO学院四周年# 还好没放弃,终于等到你~

作为一个小白&#xff0c;恩&#xff0c;白的不能再白的样子~游走于大佬身旁~每每看见大佬功成名就的样子~我就只能画饼充饥~望梅止渴~还好没放弃~在这里发现了小白变大佬的隧道~这里的人呐~都非常友善~这里的知识啊~性价比都超高~如果有来生&#xff0c;我希望早点遇见你~我们…

开始ubuntu 14.04 的装X模式---终端模式下中文输入,听歌,上irc 开启framebuffer看电影 截图...

先上图吧 卡卡的全是在tty1 下的操作&#xff0c;看电影&#xff0c;听歌&#xff0c;截图 &#xff0c;看图 &#xff0c;上irc 等等&#xff0c;相当适合在小白面前装屁&#xff01; 需要安装的软件&#xff1a; 为了能正常显示中文&#xff1a;安装fbterm sudo apt-get ins…

.NET6中关于Minimal API的简单使用

微信公众号&#xff1a;趣编程ACE收集并分享日常的.NET实战开发技巧,源码获取关注后回复 源码;**如果觉得本公众号对您有帮助&#xff0c;欢迎关注本文来自社区群粉丝投稿.NET6中关于Minimal API的简单使用详细文档参考官网 https://docs.microsoft.com/en-us/aspnet/core/fund…

DVR分布式路由

1. 背景 没有使用DVR的场景&#xff1a; 从图中可以明显看到东西向和南北向的流量会集中到网络节点&#xff0c;这会使网络节点成为瓶颈。 如果启用DVR&#xff0c;如下图&#xff1a; 对于东西向的流量&#xff0c; 流量会直接在计算节点之间传递。 对于南北向的流量&#xff…

求斐波那契数列的特征方程和通项公式

1、斐波那契数列 f(1) 1; f(2) 1; f(3) f(1) f(2);以此内推1 x 1f(x) 1 x 2f(x - 1) f(x - 2) x > 32、特征方程 解释&#xff1a;特征方程是为研究相应的数学对象而引入的一些等式&#xff0c;它因数学对象不同而不…

php实现pdf文件的生成与下载

2019独角兽企业重金招聘Python工程师标准>>> 这个有点复杂的&#xff0c;我们一步一步来说明。 受先我们要下载pdf需要的文件&#xff0c;搜索‘php生成pdf’找到相关进行下载&#xff0c;这里不做介绍 //pdf下载$name $_SESSION[ex_uname];$name_pdf$name..pdf;$u…