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];

        

    }

    

}