数据来源于豆瓣网~仅供学习交流~


本实例练习用到了SDWebImage框架:实现从网络端下载图片的功能
下载地址:https://github.com/rs/SDWebImage


实现效果及框架:


xib文件:Class是与之相联系的文件


代码部分:
Modal部分
CollectionModal.h

#import <Foundation/Foundation.h>@interface CollectionModal : NSObject@property (nonatomic,retain) NSDictionary *images;
@property (nonatomic,copy) NSString *title;@end

CollectionModal.m 能够什么都不写,也能够重写description来调试用~


View部分
collectionView.h

#import <UIKit/UIKit.h>
#import "CollectionModal.h"@interface CollectionCell : UICollectionViewCell
//与xib文件相关联
@property (weak, nonatomic) IBOutlet UIImageView *movieImage;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;//数据
@property (nonatomic,retain) CollectionModal *modal;@end

collectionView.m

#import "CollectionCell.h"
#import "UIImageView+WebCache.h"@implementation CollectionCell- (void)awakeFromNib {// Initialization code
}- (void)setModal:(CollectionModal *)modal {_modal = modal;[self setNeedsLayout];
}
//布局,当modal赋值以后,调用此函数
- (void)layoutSubviews {[super layoutSubviews];//不要忘了父类方法,不然非常easy出乱七八糟的错误_nameLabel.text = _modal.title;NSString *str = _modal.images[@"medium"];[_movieImage sd_setImageWithURL:[NSURL URLWithString:str]];}@end

Controller部分
collectionViewController.h

#import <UIKit/UIKit.h>@interface CollectionViewController : UIViewController<UICollectionViewDelegateFlowLayout,UICollectionViewDataSource>
//不要忘了遵循协议
{UICollectionView *_collectionView;NSMutableArray *_modalArray;
}
@end
#import "CollectionViewController.h"
#import "CollectionModal.h"
#import "CollectionCell.h"#define Zwidth [UIScreen mainScreen].bounds.size.width
#define Zheight [UIScreen mainScreen].bounds.size.height@interface CollectionViewController ()@end@implementation CollectionViewController- (void)viewDidLoad {[super viewDidLoad];[self _loadData];[self _creatCollectionView];// Do any additional setup after loading the view.
}#pragma mark - Data
//文件解析。载入数据
- (void)_loadData {NSString *fliePath = [[NSBundle mainBundle] pathForResource:@"exercise" ofType:@"json"];NSData *data = [NSData dataWithContentsOfFile:fliePath];NSDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];//    NSLog(@"%@",dataDic);_modalArray = [NSMutableArray array];NSArray *subjects = dataDic[@"subjects"];for (NSDictionary *dic in subjects) {CollectionModal *modal = [[CollectionModal alloc] init];modal.images = dic[@"images"];modal.title = dic[@"title"];//        NSLog(@"%@",modal);[_modalArray addObject:modal];//将文件载入到数据数组中}
}#pragma mark - collectionView
//创建collectionView
- (void)_creatCollectionView {UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];layout.minimumInteritemSpacing = 1;//内部cell之间距离layout.minimumLineSpacing = 10;//行间距layout.itemSize = CGSizeMake((Zwidth-4)/3, 200);layout.scrollDirection = UICollectionViewScrollDirectionVertical;//滚动方向设置_collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, Zwidth, Zheight) collectionViewLayout:layout];//代理设置_collectionView.dataSource = self;_collectionView.delegate = self;[self.view addSubview:_collectionView];//注冊cellUINib *nib = [UINib nibWithNibName:@"CollectionCell" bundle:[NSBundle mainBundle]];[_collectionView registerNib:nib forCellWithReuseIdentifier:@"cell"];}//协议方法的实现,以下两个方法是必须实现的
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {return _modalArray.count;
}- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {//这里包括cell的复用思想CollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];CollectionModal *modal = _modalArray[indexPath.row];cell.modal = modal;return cell;
}

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];self.window.backgroundColor = [UIColor whiteColor];[self.window makeKeyAndVisible];CollectionViewController *vc = [[CollectionViewController alloc] init];self.window.rootViewController = vc;// Override point for customization after application launch.return YES;
}

关于数据有想要的。能够评论或私信~哈哈~

MVC模式利用xib文件定制collectionCell相关推荐

  1. 利用 Spring MVC 上传多文件到指定目录 spring upload files

    本篇文章,我们会教你通过eclipse构建一个创建一个Java web项目并转为maven工程,实现用spring mvc将所选文件上传到指定目录 开发环境: 1.JDK 1.7 2.Maven 3. ...

  2. 使用mvc模式读取服务器上的文件,ASP.NET MVC之读取服务器文件资源的两种方式

    初次认识asp.net mvc时,以为所有文件都需要走一遍路由,然后才能在客户端显示, 所以我首先介绍这一种方式 比如说:我们在服务器上有图片: ~/resource/image/5.jpg 我们就需 ...

  3. MVC模式 在Java Web应用程序中的实现

    一.MVC简介 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分 ...

  4. 编码风格:Mvc模式下SSM环境,代码分层管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.分层策略 MVC模式与代码分层策略,MVC全名是ModelViewController即模型-视图-控制器,作为一种软件设计典范,用一种业 ...

  5. php下的ssm模式,编码风格:Mvc模式下SSM环境,代码分层管理

    一.分层策略 MVC模式与代码分层策略,MVC全名是ModelViewController即模型-视图-控制器,作为一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到 ...

  6. 【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)

    一. iOS 项目简介 1. iOS 文件简介 创建一个 HelloWorld 项目, 在这个 IOS 项目中有四个目录 : 如下图; -- HelloWorldTests 目录 : 单元测试相关的类 ...

  7. Android MVC模式

    Android MVC模式     [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51172105       前些天看到 ...

  8. [ASP.NET MVC 小牛之路]01 - 理解MVC模式

    特别提醒:本文编写时间是 2013 年,请根据目前 .NET 发展接收你所需的知识点. PS:MVC出来很久了,工作上一直没机会用.出于兴趣,工作之余我将展开对MVC的深入学习,通过博文来记录所学所得 ...

  9. java 框架mvc_JAVA框架-MVC模式

    MVC MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式.这种模式用于应用程序的分层开发. Model(模型) - 模型代表一个存取数据的对象或 JAVA PO ...

最新文章

  1. 当区块链遇到零知识证明
  2. 感动哭!Starbreeze发布《收获日2》VR版
  3. 未来,谁来为AI开源买单?科技圈顶级码农是这样看的 | CCF C³-04@百度
  4. Visualization Document Feb 12 16:42
  5. python新闻聚合_使用python对数据进行高效处理,包你玩转分组聚合
  6. 用python画树_Python+Turtle动态绘制一棵树实例分享
  7. jzoj2700-数字【数论,LCM】
  8. mysql配置文件完全_MySQL配置文件my.cnf详解
  9. java 实现二分法
  10. 特征提取方法: one-hot 和 TF-IDF
  11. 全局变量的声明和定义 以及dll中全局变量的导出
  12. Shell常用快捷键
  13. 爬虫—分析Ajax爬取今日头条图片
  14. 初学平面设计者应该掌握的软件是AI
  15. 网络上各种指数 总结 收集
  16. 前端程序员《HTML》标签学习
  17. UE4 C++与UMG
  18. number of lines annotated by git is not equal to number of linus in the file .check file encoding an
  19. vue2.0模板的三种写法
  20. Creator口红机实现

热门文章

  1. 蓝桥杯 ALGO-13 算法训练 拦截导弹 Java版
  2. PAT 乙级 1002. 写出这个数 (20) Java版
  3. php的4种常用运行方式
  4. 【转发】Git本地服务器搭建及使用详解
  5. list -- set方法——替换列表中指定位置的元素
  6. perl DBI 总结
  7. bat命令运行java程序
  8. Windows下Tuxedo的安装与配置-无数据库
  9. 绘制完成的cad图纸文件应使用哪一款看图软件进行查看?
  10. 【CF453D】 Little Pony and Elements of Harmony(FWT)