1. 新建appViewModel

1.1声明需要的属性

//NSString一般用copy来修饰

@property(nonatomic,copy)NSString *name;

@property(nonatomic,copy)NSString *icon;

//字典转模型的方法

- (id)initWithDict:(NSDictionary *)dict;

1.2字典转模型

- (id)initWithDict:(NSDictionary *)dict{

if(self = [super init]){

self.name = dict[@"name"];

self.icon = dict[@"icon"];

}

return self;

}

2.ViewController

#import "ViewController.h"

#import "appViewModel.h"

@interface ViewController ()

@property(nonatomic,strong)NSArray *apps;

@end

@implementation ViewController

- (NSArray *)apps{

if(_apps == nil){

//1-获取plist文件的路径

NSString *path = [[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil];

//2-读取文件

NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];

//3-字典转模型

NSMutableArray *tempArr = [NSMutableArray array];

for(NSDictionary *dic in dictArray){

appViewModel *appModel = [[appViewModel alloc]initWithDict:dic];

[tempArr addObject:appModel];

}

_apps = tempArr;

}

return _apps;

}

- (void)viewDidLoad{

[super viewDidLoad];

//1-设置frame的相关属性

CGFloat appViewW = 100;

CGFloat appViewH = 120;

CGFloat spaceX = 20;

CGFloat spaceY = 30;

CGFloat topMargin = 30;

CGFloat leftmargin = (self.view.frame.size.width - 3 * appViewW - 2 * spaceX) * 0.5;

//2-创建格子

for( int i = 0; i < self.apps.count; i ++){

//2.1-创建一个格子视图

UIView *appView = [[UIView alloc]init];

int row = i / 3;//行号

int col = i % 3;//列号

CGFloat appViewX = leftmargin + (appViewW + spaceX) * col;

CGFloat appViewY = topMargin + (appViewH + spaceY) * row;

//2.2设置frame

appView.frame = CGRectMake(appViewX, appViewY, appViewW, appViewH);

//2.3添加

[self.view addSubview:appView];

appViewModel *appViewModel = self.apps[i];

//2.4添加图片

UIImageView *head = [[UIImageView alloc]init];

CGFloat headW = 60;

CGFloat headX = (appViewW - headW) *0.5;

CGFloat headY = 0;

CGFloat headH = 60;

head.image = [UIImage imageNamed:  appViewModel.icon ];

head.frame = CGRectMake(headX, headY, headW, headH);

[appView addSubview:head];

//        head.backgroundColor = [UIColor blueColor];

//        2.5添加label

//         2.5.1 创建一个文本标签

UILabel *nameLabel = [[UILabel alloc]init];

CGFloat nameLabelX = 0;

CGFloat nameLabelY = headY + headH;

CGFloat nameLabelW = appViewW;

CGFloat nameLabelH = 30;

nameLabel.frame = CGRectMake(nameLabelX, nameLabelY, nameLabelW, nameLabelH);

[appView addSubview:nameLabel];

//        nameLabel.backgroundColor = [UIColor grayColor];

nameLabel.text = appViewModel.name;

//       2.5.2设置文字大小

nameLabel.font = [UIFont systemFontOfSize:13];

//        2.5.3设置文字居中

nameLabel.textAlignment = NSTextAlignmentCenter;

//        2.6添加button

UIButton *downLoadBtn = [[UIButton alloc]init];

CGFloat downLoadBtnX = 10;

CGFloat downLoadBtnY = nameLabelY + nameLabelH + 10;

CGFloat downLoadBtnW = appViewW - downLoadBtnX *2;

CGFloat downLoadBtnH = 30;

downLoadBtn.frame = CGRectMake(downLoadBtnX, downLoadBtnY, downLoadBtnW, downLoadBtnH);

[appView addSubview:downLoadBtn];

//        downLoadBtn.backgroundColor = [UIColor greenColor];//设置背景色

[downLoadBtn setTitle:@"下载" forState:UIControlStateNormal];//设置文字

[downLoadBtn setBackgroundImage:[UIImage imageNamed:@"buttongreen"] forState:UIControlStateNormal];

[downLoadBtn setBackgroundImage: [UIImage imageNamed:@"buttongreen_highlighted"] forState:UIControlStateHighlighted];

//        downLoadBtn.

//        按钮内部至少有两个控件,一个label,一个imageView,

downLoadBtn.titleLabel.font = [UIFont systemFontOfSize:14];

}

}


iOS应用管理(字典转模型)的更多相关文章

  1. 【iOS问题】字典转模型,属性个数不匹配问题

    一.字典转模型的键值对与模型属性不匹配问题 1. 字典的键个数 < 模型的属性个数 (key 能与模型的属性匹配) 1> .KVO 方式: - setValuesForKeysWithDi ...

  2. iOS开发UI篇—字典转模型

    iOS开发UI篇—字典转模型 一.能完成功能的“问题代码” 1.从plist中加载的数据 2.实现的代码 // // LFViewController.m // 03-应用管理 // // Creat ...

  3. iOS开发—字典转模型,KVC设计模式

    iOS开发UI基础—字典转模型 开发中,通常使用第三方框架可以很快的实现通过字典转模型,通过plist创建模型,将字典的键值对转成模型属性,将模型转成字典,通过模型数组来创建一个字典数组,通过字典数组 ...

  4. 字典转模型框架 Mantle的使用:国外程序员最常用的iOS模型

    Mantle简介 Mantle 是iOS和Mac平台下基于Objective-C编写的一个简单高效的模型层框架. Mantle能做什么 Mantle可以轻松把JSON数据.字典(Dictionary) ...

  5. iOS开发——高级技术精选OC篇&Runtime之字典转模型实战

    Runtime之字典转模型实战 如果您还不知道什么是runtime,那么请先看看这几篇文章: http://www.cnblogs.com/iCocos/p/4734687.html http://w ...

  6. iOS开发——网络篇——JSON和XML,NSJSONSerialization ,NSXMLParser(XML解析器),NSXMLParserDelegate,MJExtension (字典转模型),GDataXML(三方框架解析XML)

    一.JSON 1.JSON简介什么是JSONJSON是一种轻量级的数据格式,一般用于数据交互服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典 ...

  7. IOS开发UI基础之Plis文件-字典转模型

    什么是plist文件? 在开发中直接将数据写在代码里面 不是一种合理的做法 如果数据经常改变 就需要经常翻开对应的代码进行修改 造成代码扩展性低 因此,可以考虑将经常变的数据放在⽂文件中进⾏行存储,程 ...

  8. 【iOS开发-48】九宫格布局案例:自己主动布局、字典转模型运用、id和instancetype差别、xib反复视图运用及与nib关系

    本次九宫格案例: (1)导入app.plist和各种图片素材,方便兴许开发.实际开发中,也是如此. (2)把plist中数组导入进来. --由于本案例中app.plist终于是一个数组,数组里面是字典 ...

  9. ios开发- 利用运行时(runtime)字典转模型

    现在的ios开发中,我们通常会使用MVC模式.当我们拿到数据的时候,我们要把数据转成模型使用. 一般情况我们拿到的数据都是字典.这是我们就需要将字典转成模型对象了. 当对象的属性很少的时候,我们可以直 ...

随机推荐

  1. spring事务配置的两种方式

    spring所有的事务管理策略类都继承自org.springframework.transaction.PlatformTransactionManager接口. <!-- 事务管理器配置,单数 ...

  2. 使用jupyterthemes插件定制jupyter notebook界面

    jupyter notebook界面是可以定制的,定制位置在:C:\anaconda\Lib\site-packages\notebook\static\custom. 启动jupyter noteb ...

  3. scp的两种方式

    如果host A 与 host B建立了信任连接(B有A的public key),那么从A向B传送文件,或者从B上传回文件都可以省略密码.但是前提是命令是在A上执行的. 从A向B拷贝文件 on hos ...

  4. Spring MVC @PathVariable被截断

    一.问题描述 一个控制器提供RESTful访问信息: @RequestMapping(method = RequestMethod.GET, value = Routes.BLAH_GET + &qu ...

  5. Groovy 学习手册(7)

    10. Groovy GPars GPars 一开始在 Groovy 中作为一个单独的项目,同时带来了很多并发的机制.它包含了很多并行的map/redue,Actors,以及其他很多并发的模块. 1. ...

  6. 如何给mysql用户分配权限

    1,Mysql下创建新的用户 语法: 1.create user 用户名 identified by '密码'; 例:create user xiaogang identified by '12345 ...

  7. python pandas replace函数

    在处理数据的时候,很多时候会遇到批量替换的情况,如果一个一个去修改效率过低,也容易出错.replace()是很好的方法. 1.基本结构: df.replace(to_replace, value) 前 ...

  8. Appium 点击屏幕

    由于版本变更,appium 点击屏幕方法已经改变, TouchAction action = new TouchAction(driver); Duration duration = Duration ...

  9. Linux磁盘IO监控[zz]

    磁盘 I/O 监控是 Unix/Linux 系统管理中一个非常重要的组成部分.它可以监控吞吐量.每秒 I/O 数.磁盘利用率.服务时间等信息,并且在发现异常时,发送告警信息给系统管理员,便于系统管理员 ...

  10. Xilinx 常用模块汇总(verilog)【01】

    作者:桂. 时间:2018-05-07  19:11:23 链接:http://www.cnblogs.com/xingshansi/p/9004492.html 前言 该文私用,不定期更新,主要汇总 ...