OC开发_代码片段——使用Xib自定义tableViewCell
一、实现步骤
1、新建一个XIB文件:描述cell——tableCell.xib
2、新建UITableViewCell的子类,也就是cell文件:封装XIB内部的所有东西——TestCell.m \Testcell.h
2.1 在cell文件中拥有XIB中的所有子控件 (包括生命属性,进行连线)
2.2 给cell增加模型属性,即通过重写set方法,根据模型属性设置cell内部子控件的属性 :
(这一步是从控制器解放抽取出来放在cell中)
2.3 提供一个类方法testCell,使得返回从XIB创建好的从 cell对象(也就是mainBundle):
(这一步是从控制器解放抽取出来放在cell中)
2.4 设置一个重用标识,Identifier
(这一步是从控制器解放抽取出来放在cell中)
2.5 设置cell的高度
(这一步是从控制器解放抽取出来放在cell中)
3、修改XIB中cell的类名即Class:使得XIB和cell相关联 ——TestCell
4、新建一个模型,即数据模型,使得封装数据 ——TestModel.m\TestModel.h
5、控制器取数
5.0 设置每一个section 有多少行:numberOfRowsInsection
5.1 使用重用标示取缓存池取得cell
5.2 如果缓存池没有cell,则创建一个cell ,这个就对应上面得TestCell
5.3 传递模型给cell (这里就需要在 cell中 @class TestModel; ,也就是对应上面得2.2set方法)
二、注意点:
1、缓存为空的时候,通过nsBundle,mainBundle获得数组(两种方法)
//方法1
NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"tableCell" owner:nil options:nil];
cell = objects[]; //或者:方法2
UINib *nib = [UINib nibWithNibName:@"tableCell" bundle:nil];//nil则默认为mainBundle
NSArray *array = [nib instantiateWithOwner:nil options:nil];
cell = array[];
2、cell的高度,
技巧1:代理方法
技巧2:在viewDidLoad中 self.tableView.rowheight=80(适用于每行cell的高度相同)
3、循环利用缓存中的cell,必须 在Xib的identifier中设置和代码中一样的标识(XIB适用)
4、构造模型 构造方法 :自定义构造方法:必须调用父类的构造方法
三、代码实现
TestCell.m:
#import "TestCell.h"
#import "TestModel.h"
@implementation TestCell +(id) testCell
{
return [[NSBundle mainBundle] loadNibNamed:@"tableCell" owner:nil options:nil][];
}
-(void) setModel:(TestModel *)model
{
_model = model; _descLabel.text = _model.desc;
_nameLabel.text = _model.name;
_priceLabel.text = [NSString stringWithFormat:@"%d $",_model.price];
_iconImage.image = [UIImage imageNamed:_model.icon]; } +(NSString *) getID
{
return @"cell";
} @end
TestModel.m:
#import "TestModel.h" @implementation TestModel //自定义构造方法,必须调用父类的构造方法
-(id) initWithDict:(NSDictionary *)dict
{
if(self = [super init])
{
self.desc = dict[@"desc"];
self.name = dict[@"name"];
self.icon = dict[@"icon"];
self.price = [dict[@"price"] intValue];
}
return self;
} +(id) newsWithDict:(NSDictionary *)dict
{
return [[self alloc] initWithDict:dict];
} @end
TestTableViewController.m:
#import "TestTableViewController.h"
#import "TestCell.h"
#import "TestModel.h" @interface TestTableViewController ()
{
NSMutableArray *_data; }
@end @implementation TestTableViewController - (void)viewDidLoad {
[super viewDidLoad];
self.tableView.rowHeight = ; //加载plist文件数据数组
NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"data.plist" ofType:nil]];
_data = [NSMutableArray array];
for (NSDictionary *arr in array) {
[_data addObject:[TestModel newsWithDict:arr]];
} } - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} #pragma mark - Table view data source - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
#warning Incomplete method implementation.
// Return the number of rows in the section.
return _data.count;
} - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { //1、定义缓存标识
//static NSString *ID = @"cell"; //2、从缓存池取出数据
TestCell *cell = [tableView dequeueReusableCellWithIdentifier:[TestCell getID]]; //3、判断是否油缓存可以取
if (cell == nil) { cell = [TestCell testCell];
} //4、传递模型数据
cell.model = _data[indexPath.row]; return cell;
} @end
源码下载:http://pan.baidu.com/s/1kTFuHwV
OC开发_代码片段——使用Xib自定义tableViewCell的更多相关文章
- OC开发_代码片段——代码编写自定义的tableViewCell
一.介绍 之前已经实现过通过简单的XIB文件来自定义我们的tableViewCell,包括每一步的步骤和代码:http://www.cnblogs.com/daomul/p/4355999.html ...
- OC开发_代码片段——代码编写简单的tableViewCell
许久前写的简单的tableView例子,主要针对处理缓存.协议.数据源datasource.局部刷新等问题进行解析. 其实这是一篇不全面的记录,只是用来记录一些备忘的东西,更全面的是使用TablVie ...
- 36个Android开发常用代码片段
//36个Android开发常用代码片段 //拨打电话 public static void call(Context context, String phoneNumber) { context.s ...
- 安卓开发_浅谈ListView(自定义适配器)
ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果 有这样一个Demo ...
- iOS开发-代码片段(Code Snippets)提高开发效率
简介 在 XCode4 引入了一个新特性,那就是“代码片段(Code Snippets)”.对于一些经常用到的代码,抽象成模板放到 Code Snippets 中,使用的时候就只需要键入快捷键就可以了 ...
- swift开发常用代码片段
// 绑定事件 cell.privacySwitch.addTarget(self, action: #selector(RSMeSettingPrivacyViewController.switch ...
- Android开发常用代码片段
拨打电话 public static void call(Context context, String phoneNumber) { context.startActivity( new Inten ...
- OC开发_整理笔记——多线程之GCD
一.进程和线程 二.各种队列! 1.GCD:Grand Central Dispatch 2.串行队列(Serial) 你可以创建任意个数的串行队列,每个队列依次执行添加的任务,一个队列 ...
- OC开发_整理笔记——友盟分享(社交化组件)
0.友盟的地址 http://dev.umeng.com,进入友盟,在使用友盟之前我们需要注册账号获取key (1 进入我们的产品,添加新应用 (2 输入信息,然后就会获取到key 1.选择社会化分 ...
随机推荐
- 有趣的 Mysql 存储引擎
Mysql 提供了一套统一的应用开发模型和核心 API,因此,尽管不同的存储引擎拥有不同的特性,不过对于开发人员,应用操作都是完全透明的.应用层的连接并不直接访问存储引擎层,而是访问 Mysql 提供 ...
- 普通windows版本安装winServer的特色功能 以dedup功能为展示点
安装 Windows 功能角色 1.选择安装源 在 Windows 8.1 系统上不存在重复数据删除功能,需要从对应的服务器版本,即 Windows Server 2012 R2 上提取相关文件. 2 ...
- Hibernate注解关系映射
Hibernate Annotation关系映射的几种类型映射用法及使用方法(说明:以前实例的实体是user和role,主键分别是userid和roleid) 1)一对一外键关联映射(单向) @O ...
- gen_server的一些猜测
1. exit(Pid,Reason)貌似不会引起gen_server的terminate()的执行. 猜测依据:erlang编程指南的第十二章的272页 终止 当从 回调函数中的一个收到stop ...
- hbase学习 rowKey的设计-4
访问hbase table中的行,只有三种方式: 1 通过单个row key访问 2 通过row key的range 3 全表扫描 Hadoop Sequence File 文中可能涉及到的API: ...
- Java进阶路线图
第一阶段 技术名称 技术内容 J2SE(Java基础部分) Java开发前奏 计算机基本原理,Java语言发展简史以及开发环境的搭建,体验Java程序的开发,环境变量的设置,程序的执行过程,相关反编译 ...
- About {DynamicResource {x:Static SystemColors.ControlBrushKey}}
from : http://blog.sina.com.cn/s/blog_749e42850100sahi.html 前提: <system:String x:Key="{Compo ...
- MathType如何编辑手写体l
MathType在编辑公式不仅方便而且规范,并且能够根据自己的需要选择不同的字体进行使用,可以是正体也可以是斜体,可以是新罗马体,也可以是花体,这些用word公式编辑器MathType都是可以的.还有 ...
- Android 6.0启动过程具体解析
在之前的一篇文章中.从概念上学习了Andoird系统的启动过程.Android系统启动过程学习 而在这篇文章中,我们将从代码角度细致学习Android系统的启动过程,同一时候,学习Android启动过 ...
- 【RF库Collections测试】Get Dictionary Items
Name:Get Dictionary ItemsSource:Collections <test library>Arguments:[ dictionary ]Returns item ...