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. 自己动手做——简易下载工具 SimpleDownloader

    一.说明 二.开发 三.源代码 源代码:https://github.com/FrankFan/SimpleDownloader 可执行文件下载地址

  2. ios中PagedFlowView的用法

    下载地址 引入PagedFlowView.h  PagedFlowView.m文件 #import <UIKit/UIKit.h> #import "PagedFlowView. ...

  3. hihocoder第229周:最大连续字母个数

    题目链接 给定一个仅包含小写字母的字符串s(长度小于1e5),你可以交换任意两个字符的位置,现在允许交换k次,要求交换之后,s中最长的连续相同字符个数尽量多,求这个最长连续区间的长度. 样例 输入 1 ...

  4. 使用自连接、for xml path('')和stuff合并显示多行数据到一行中(转)

    原文: http://njm.iteye.com/blog/795881 --使用 自连接.for xml path('')和stuff合并显示多行数据到一行中 --注 --1.计算列可以不用包含在聚 ...

  5. android开发学习---基础知识学习、如何导入已有项目和开发一个电话拨号器

    一.基础知识点学习  1.Android体系结构 如图所示,android 架构分为三层: (1)最底层是linux内核,主要是各种硬件的驱动,如相机驱动(Camera Driver),闪存驱动(Fl ...

  6. java+win7+eclipse+Maven+sikuli 配置总结---图形脚本语言

    简介:Sikuli 是一种新颖的图形脚本语言,或者说是一种另类的自动化测试技术.它与我们常用的自动化测试技术(工具)有很大的区别. 关于配置,一直是一个问题,下面做个总体介绍,用sikuli也有几个月 ...

  7. NSObject协议中方法:description 和 debugDescription

    description基本概念 1.NSLog(@"%@", objectA);这会自动调用objectA的description方法来输出ObjectA的描述信息. 2.desc ...

  8. 浅谈 .NET 中的对象引用、非托管指针和托管指针 理解C#中的闭包

    浅谈 .NET 中的对象引用.非托管指针和托管指针   目录 前言 一.对象引用 二.值传递和引用传递 三.初识托管指针和非托管指针 四.非托管指针 1.非托管指针不能指向对象引用 2.类成员指针 五 ...

  9. thinkphp C函数的实现原理

    在写一个php原生函数的时候,想起使用thinkphp的C函数读取数据库配置非常方便,于是看了看源码的实现,原理很简单,分享一下: 下面是common.php,实现了C函数: if(is_file(& ...

  10. Java Date and Calendar examples

    Java Date and Calendar examples This tutorial shows you how to work with java.util.Date and java.uti ...