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. 阿里员工都是这样排查Java问题的,附工具单(转)

    平时的工作中经常碰到很多疑难问题的处理,在解决问题的同时,有一些工具起到了相当大的作用,在此书写下来,一是作为笔记,可以让自己后续忘记了可快速翻阅,二是分享,希望看到此文的同学们可以拿出自己日常觉得帮 ...

  2. oracle的decode函数

    以下转自百度, 类似于case... when... then...else...end... DECODE函数是ORACLE PL/SQL是功能强大的函数之一,目前还只有ORACLE公司的SQL提供 ...

  3. 修改cnblogs日历控件CSS

    自定义cnblogs日期控件的样式时, 关于透明度 控件头部死活没法透明 在background属性值后边添加!important即把cnblogs系统自带的属性覆盖, 解决了该问题. !import ...

  4. hihocoder第212周-动态规划

    题目链接 import java.util.Scanner; public class Main { long mod = (long) (1e9 + 7); int MAXN = 107; int ...

  5. Python import容易犯的一个错误

    有时,我们需要手动添加一些依赖 b.py import sys sys.path.insert(0,"haha")#引用haha目录下的a文件 当使用时 import a impo ...

  6. JavaScript Cookies,创建,获取cookies value

    什么是cookie? cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie.你可以使用 JavaScript 来创建和取回 cookie ...

  7. shell脚本中解决SCP命令需要输入密码的问题

    使用密钥文件.       这里假设主机A(192.168.100.3)用来获到主机B(192.168.100.4)的文件.   在主机A上执行如下命令来生成配对密钥: ssh-keygen -t r ...

  8. 归并排序(C++实现)

         归并排序是利用"归并"技术来进行排序.归并是指将若干个已排序的子文件合并成一个有序的文件.常见的归并排序有两路归并排序(Merge Sort),多相归并排序(Polyph ...

  9. linux下yum命令出现Loaded plugins: fastestmirror Determining fastest mirrors

    今天yum install的时候出问题了,找了半天才找到一个可行的解决办法 fastestmirror是yum的一个加速插件,这里是插件提示信息是插件不能用了. 不能用就先别用呗,禁用掉,先yum了再 ...

  10. 记录EntityValidationErrors的详细信息

    0.一个问题 使用过EF的人相信都会遇到Validation failed for one or more entities. See ‘EntityValidationErrors’这种异常,这是由 ...