MVC思想架构的简单自定义UITableViewCell
self = [superinitWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
[self createUI];
}
returnself;
}
这里我们给UI页面的定制,单独写成一个方法,然后去进行我们自己的定制
- (void)createUI{
_iconView = [[UIImageView alloc]initWithFrame:CGRectMake(5, 5, 70, 70)];
[self.contentView addSubview:_iconView];
_nameLabel = [[UILabel alloc]initWithFrame:CGRectMake(80, 5, 230, 25)];
_nameLabel.font = [UIFont systemFontOfSize:16];
_nameLabel.textColor = [UIColor blackColor];
[self.contentView addSubview:_nameLabel];
_priceLabel = [[UILabel alloc]initWithFrame:CGRectMake(80, 30, 230, 25)];
_priceLabel.font = [UIFont systemFontOfSize:14];
_priceLabel.textColor = [UIColor redColor];
[self.contentView addSubview:_priceLabel];
_detailLabel = [[UILabel alloc]initWithFrame:CGRectMake(80, 55, 230, 25)];
_detailLabel.font = [UIFont systemFontOfSize:12];
_detailLabel.textColor = [UIColor grayColor];
[self.contentView addSubview:_detailLabel];
}
可以看到,我们在当前的cell上,自定义了一个UIImageView用来加载图片,三个UILable用来展示相应的信息。一般来说,Controller里面采用的是self.view addSubview的方式来加载控件,同样的,UITableViewCell也是一个View,但是它就不能用view ,而是用contentView来加载,这个以后再提。于是这样我们就能将我们需要的设计,在我们这个cell里实现了。
在日常的开发工作中,很少有将数据写死的,通常都是从后台通过请求接受数据,然后将数据再根据需要加载到相应的控件上,所以对于我们来说,控件是可变的,控件上的数据是可变的,这样的话,我们就将所需要的数据单独抽取出来建成一个模型。分析一下需求与代码,我们现在需要的是一个UIImageView的image与三个UILable的text信息,所以,我们将这些属性单独抽取出来作为我们这个cell的模型。
新建一个MyModel类,这个类继承自NSObject,里面放的就是我们cell的属性,代码如下:
@property (retain, nonatomic) UIImage *icon;
@property (copy, nonatomic) NSString *nameStr;
@property (copy, nonatomic) NSString *priceStr;
@property (copy, nonatomic) NSString *detailStr;
注意:因为我们这个类是需要让其他的类引用,并且是需要接受数据的,所以应该写在.h文件,interface下面。
到这里,我们的MVC的思想大致就出来了,但是还有一个问题,那就是如何让cell与自己的模型相关联起来。我们需要在cell中往外暴露一个方法,去接收模型,同样的原因,我们在cell的.h文件中声明这个方法:
- (void)customWithMyModel:(MyModel *)bm;
然后在cell的.m文件中来实现这个方法,参数类型就是我们自定义的这个模型类
- (void)customWithMyModel:(MyModel *)bm{
_iconView.image = bm.icon;
_nameLabel.text = bm.nameStr;
_priceLabel.text = bm.priceStr;
_detailLabel.text = bm.detailStr;
}
到这里为止,我们的自定义部分基本就结束了,接下来就是在Controller里面去使用我们自定义的Cell了
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
staticNSString *idt= @"idt";
MyCell *cell = [tableView dequeueReusableCellWithIdentifier:idt];
if (!cell) {
cell = [[MyCell alloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:idt];
}
MyModel *mm= [_dataArrobjectAtIndex:indexPath.row-1];
//将数据模型传给cell,让cell设置图片及文字
[cell customWithMyModel:mm];
return cell;
}
这样就能创建一个我们自定义的,使用MVC思想架构的cell了,数据怎么接?那就是另外一篇笔记了哈哈。
MVC思想架构的简单自定义UITableViewCell的更多相关文章
- iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局 一.项目文件结构和plist文件 二.实现效果 三.代码示例 1.没有使用配套的类,而是直接使用xib文 ...
- Node实现简单的注册时后端的MVC模型架构
实现一个简单的注册界面后端MVC模型架构 第一步:在生成的express框架的app.js中添加一个路由,代码如下:var api = require('./routes/api'); app.use ...
- ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布 ...
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
- Spring MVC内容协商实现原理及自定义配置【享学Spring MVC】
每篇一句 在绝对力量面前,一切技巧都是浮云 前言 上文 介绍了Http内容协商的一些概念,以及Spring MVC内置的4种协商方式使用介绍.本文主要针对Spring MVC内容协商方式:从步骤.原理 ...
- MVC与WebForm的简单的比较
MVC与WebForm的简单的比较 ASP 强制程序员将业务逻辑和展示页放到一个文件中 WebForm 允许程序员将业务逻辑与页面展示分开到不同的文件中,并且提供强大的开发平台来写 业务逻辑代码 ...
- MVC模块化架构
全面解析ASP.NET MVC模块化架构方案 什么叫架构?揭开架构神秘的面纱,无非就是:分层+模块化.任意复杂的架构,你也会发现架构师也就做了这两件事. 本文将会全面的介绍我们团队在模块化设计方面取得 ...
- MVC思想概述
一. 传统Model1和Model2 Model1:整个web应用几乎全部用JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接作出响应.用少量的javaBean来处理数据库链接,数据库访问 ...
- MVC思想概叙
随着应用系统的逐渐增大,系统的业务逻辑复杂度是以几何的方式增长,在这种情况下,如果依然把所有的业务逻辑都放在JSP页面中,那将成为一场恶梦. MVC思想将应用中各个组件按照功能来进行分类,不同的组将使 ...
随机推荐
- UGUI学习之InputField
密码框在Context type 设置为Passwold 设置背景和调整字体颜色与透明度. 还有一个就是Toggle,(开关)要指定他的Graphic.
- C++Primer笔记(1)
1.初始化 在C++中,初始化与赋值操作是完全不同的两个操作.初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来代替. 初始化的方式有: ; } ...
- 我的第一个QML Button的实现
编写第一个QML,在成功跑完HelloWorld后,决定自己实现Button按钮类. Button是在Quick2版本以上的QtQuick Controls出现的. 在Qt5.5.1版本中,选择插入Q ...
- Qt Creator下载
Qt官网 http://qt.digia.com qt的历史版本可以到http://download.qt-project.org/archive/qt/下载
- TRIGGERS_监测系统_原始数据表触发器—调用告警信息存储过程
//每次向originaldata表中插入数据就会触发该触发器 create or replace trigger originaldata_to_alarm after insert on ori ...
- ThreadLocal的使用 .
早在Java 1.2推出之时,Java平台中就引入了一个新的支持:java.lang.ThreadLocal,给我们在编写多线程程序时提供了一种新的选择.使用这个工具类可以很简洁地编写出优美的多线程程 ...
- [C++程序设计]函数的递归调用
在调用一个函数的过程中又出现直接或间接地调用 该函数本身,称为函数的递归(recursive)调用. 包含递归调用的函数称为递归函数. 在实现递归时,在时间和空间上的开销比较大 求n! #includ ...
- du与df为什么有时候会有差异
以下仅为本人理解,非官方! du命令:统计父目录的目录项,若目录项存在,则进行查找 df命令:统计inode节点,根据inode节点存储的块大小进行统计 差异原因: 当一个文件被进程调用后,复制文件到 ...
- collections——高性能容器数据类型
由于最近对机器学习算法感兴趣,一直知道python有一个包collections封装了一些比dict,list之类高级点的类,所以抽空研究下,为接下来的工作准备. 主要参考是https://docs. ...
- AJAX Data 传值 无效的JSON基元:AJAX jQuery的方法,用c#WEBMETHOD-c#,jquery.
我有这样的代码:I数据值,而不是连接字符串作为对象常量.为什么?看到这里 我的代码是这样的:- $.ajax({ url: "../Member/Home.aspx/SaveClient&q ...