MVC模式利用xib文件定制collectionCell



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



本实例练习用到了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];//不要忘了父类方法,不然很容易出乱七八糟的错误
    _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];

    //注册cell
    UINib *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;
}


关于数据有想要的,可以评论或私信~哈哈~

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-31 14:32:09

MVC模式利用xib文件定制collectionCell的相关文章

【COCOS2DX-LUA 脚本开发之十二】Hybrid模式-利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)

转载自:http://www.himigame.com/iphone-cocos2dx/1354.html 首先说明一个问题: 为什么要在线更新资源和脚本文件!? 对于此问题,那要说的太多了,简单概括,如果你的项目已经在google play 或Apple Store 等平台上架了,那么当你项目需要做一些活动或者修改前端的一些代码等那么你需要重新提交一个新版本给平台,这时候你的上架时候是个不确定的时候,具体什么时候能上架,主要跟平台有关,你再着急,也没有用的. 那么如果你的项目是使用脚本语言进行

Thinkphp -- 利用MVC模式完成注册登录功能

这是一篇记录向,记录我后台的学习过程. 如有不正确的地方,请多多指教. 基础知识: MVC即 Model View Controller Model(模型)表示应用程序核心(比如数据库记录列表). View(视图)显示数据(数据库记录). Controller(控制器)处理输入(写入数据库记录). (图源https://www.runoob.com/design-pattern/mvc-pattern.html) 当我们浏览一个网页的时候首先会访问到View(视图层) 在我们输入用户名密码之后,

asp.net下利用MVC模式实现Extjs表格增删改查

在网上看到有很多人写extjs下的表格控件的增删改查,但是大多数都是直接从后台读取数据,很少有跟数据库进行交互的模式. 今天就来写一个这样的例子.欢迎大家交流指正. 首先简单介绍一下MVC模式,MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写. Model(模型) 是应用程序中用于处理应用程序数据逻辑的部分.通常模型对象负责在数据库中存取数据. View(视图) 是应用程序中处理数据显示的部分.通常视图是依据模型

027-应用管理之MVC模式-iOS笔记

学习目标 1.[理解]九宫格坐标计算 2.[理解]应用添加子控件 3.[理解]应用子控件添加数据 4.[理解]字典转模型 5.[掌握]xib初体验 6.[理解]初识MVC设计模式 7.[理解]根据MVC模式封装我们的应用 一.九宫格坐标计算 实现以九宫格的形式展示应用信息,点击按钮后能监听按钮单击事件.类似这种类型app往往都是动态加载应用数据,所以我们不可能将数据写死,因为我们不确定应用数量,所以就无法确认控件的数量.最终效果图如下: 界面分析: 一个控件需要显示在界面上,必须为其设置fram

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

MVC简介 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.MVC被独特的发展起来用于映射传统的输入.处理和输出功能在一个逻辑的图形化用户界面的结构中. MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创

Spring MVC -- MVC模式

对于简单的Java Web项目,我们的项目仅仅包含几个jsp页面,由于项目比较小,我们通常可以通过链接方式进行jsp页面间的跳转. 但是如果是一个中型或者大型的项目,上面那种方式就会带来许多维护困难,代码复用率低等问题.因此,我们推荐使用MVC模式. 一 MVC概念 1.什么是MVC MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范.它是用一种业务逻辑.数据与界面显示分离的方法来组织代码,将

MVC模式介绍

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.MVC被独特的发展起来用于映射传统的输入.处理和输出功能在一个逻辑的图形化用户界面的结构中. MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现

ThinkPHP 利用.htaccess文件的 Rewrite 规则隐藏URL中的 index.php

去掉 URL 中的 index.php ThinkPHP 作为 PHP 框架,是单一入口的,那么其原始的 URL 便不是那么友好.但 ThinkPHP 提供了各种机制来定制需要的 URL 格式,配合 Apache .htaccess 文件,更是可以定制出人性化的更利于 SEO 的 URL 地址来. .htaccess文件是 Apache 服务器中的一个配置文件,它负责相关目录下的网页配置.我们可以利用 .htaccess 文件的 Rewrite 规则来隐藏掉 ThinkPHP URL 中的 in

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

一. IOS 项目简介 1. IOS 文件简介 创建一个 HelloWorld 项目, 在这个 IOS 项目中有四个目录 : 如下图; -- HelloWorldTests 目录 : 单元测试相关的类和资源; (1) HelloWorld 目录 HelloWorld 目录介绍 : -- 命名规则 : 该目录名称与 IOS 项目名称相同, 是主目录; -- 存放内容 : IOS 项目的 源码文件, 界面设计文件, 资源文件都存放在该目录下; -- 源文件 : Objective C 的 .m 和