[How to]使用自定义cell进行tableview的创建,适用于cell样式不发生变化的情况。
1.简介
在tableview中又默认的cell格式,其中组织如下:
<截取自官网文档>


最终的在页面上默认的cell也只能像上述那样的显示效果,如果这种要是无法满足我们的界面要求,那么我们可以自定义cell来进行创建。
2.实现
目标:我们需要制作如下一个table,它的cell高度宽度和排版都是一样的,所以非常适合使用xib来定制cell。

1. 初始化工程后我们将table的数据存放在plist中:

2.在controller中我们以懒加载的方式将plist数据加载进来
详细方法可参考[How to]如何自定义plist文件和读取plist文件内容
3.创建xib文件

4.选择Table View Cell控件,以此为基础根据需求绘制xib,并且设定高宽等属性

5. 为了后续能够重用cell,需要设定cell的标示:

6.创建Table Cell子类,在这个类中我们采用可重用的方式创建cell,目的是防止过多的创建新的cell造成资源和性能的损耗。
.h
#import <UIKit/UIKit.h> @class XFGoodModel; @interface XFGoodTableViewCell : UITableViewCell @property(nonatomic,strong) XFGoodModel *goodInfo; +(instancetype) goodCellWithTableView:(UITableView *) tableView; @end
.m
#import "XFGoodTableViewCell.h"
#import "XFGoodModel.h"
@interface XFGoodTableViewCell()
@property (weak, nonatomic) IBOutlet UIImageView *googImageView;
@property (weak, nonatomic) IBOutlet UILabel *nameView;
@property (weak, nonatomic) IBOutlet UILabel *priceView;
@property (weak, nonatomic) IBOutlet UILabel *soldNumView;
@end
@implementation XFGoodTableViewCell
/**
* 快速以重用的方式快速初始化cell
*
* @param tableView 当前tableview
*
* @return 新建的或者重用的cell
*/
+(instancetype)goodCellWithTableView:(UITableView *)tableView
{
// 根据可ID进行cell的可重用查找
static NSString *reuseId = @"goodcell";
XFGoodTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];
// 当没有可重用cell的时候我们需要从xib中加载cell
if (!cell)
{
// 指定xib文件名称,在xib中可以包含很多view,这里我们只有一个cell的view,所以直接取得lastObject
cell = [[[NSBundle mainBundle] loadNibNamed:@"XFGoodCell" owner:nil options:nil]lastObject];
}
return cell;
}
/**
* 设定当前cell的数据,同时设定cell中各个空间的值
*
* @param goodInfo <#goodInfo description#>
*/
-(void) setGoodInfo:(XFGoodModel *)goodInfo
{
_goodInfo = goodInfo;
self.googImageView.image = [UIImage imageNamed:goodInfo.image];
self.nameView.text = goodInfo.name;
self.priceView.text = [NSString stringWithFormat:@"¥ %ld", (long)goodInfo.price];
self.soldNumView.text = [NSString stringWithFormat:@"已经售出 %ld 份", (long)goodInfo.soldNum];
}
@end
7. 需要将类与xib中的table cell关联并进行控件与代码的连线。

至此,cell部分已经创建完毕。接下来我们一起去实现数据源代理。
8. 在将controller本身作为tableView的数据源代理,并且去实现TableView的数据源代理方法:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
// 指定tableview的数据代理
self.goodsTableView.dataSource = self;
}
#pragma 重写代理方法
//返回总数据量
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// 1.加载xib取得cell定义
XFGoodTableViewCell *cell = [XFGoodTableViewCell goodCellWithTableView:tableView];
// 2.设定cell数据
cell.goodInfo = self.goodsList[indexPath.row];
// 3.返回cell
return cell;
}
// 加载cell
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.goodsList.count;
}
3. 总结
使用cell可以帮助我们扩展TableViewCell以显示更多的内容和交互。本文种特别提到了重用cell,这一点特别重要,因为在Table滚动的时候每一行都需要在代理方法中生成和数据设定。
使用重用的方式后,可以提高性能,减少由于过多创建新对象而造成的资源压力。
无论是是使用自定义cell还是自定义其他的普通view的时候,所有的数据和动作都需要封装进本身的类中。对于controller来说只是就只保持三步:创建cell、设定cell数据和返回cell。
[How to]使用自定义cell进行tableview的创建,适用于cell样式不发生变化的情况。的更多相关文章
- 如何得到自定义UITableViewCell中的按钮所在的cell的indexPath.row
在自定义UITableViewCell中创建了一个按钮. 想在点击该按钮时知道该按钮所在的cell在TableView中的行数.就是cell的 indexPath.row两种方法都很好.-(IBAct ...
- iOS开发——UI进阶篇(三)自定义不等高cell,如何拿到cell的行高,自动计算cell高度,(有配图,无配图)微博案例
一.纯代码自定义不等高cell 废话不多说,直接来看下面这个例子先来看下微博的最终效果 首先创建一个继承UITableViewController的控制器@interface ViewControll ...
- iOS回顾笔记(08) -- 自定义Cell的类型和创建步骤总结
iOS回顾笔记(08) -- 自定义Cell的类型和创建步骤总结 项目中我们常见的自定义cell主要分为两种 等高cell:如应用列表.功能列表 非等高cell:如微博列表.QQ聊天页面 下面对这 ...
- tableView 选中cell时,获取到当前cell
// >> 找到当前选中的cell,设置选中时的cell背景色 SideTableViewCell * cell = (SideTableViewCell *)[tableView cel ...
- 关于collectionView和tableView的两种cell的出列方法的区别
相信好多人一定会对collectionView和tableView的两种cell出列方法有所疑问,下面以UICollection为例子进行举例说明 假设我们已经创建了一个collectionView, ...
- 使用 StoryBoard 制作一个能够删除cell的TableView
本篇博客方便自己检索使用.资源链接 下面是制作效果图,点击删除按钮,就能将该cell删除: 下面是主要的代码: #define KSUPER_TAG 20000 #define KDEFAU_TAG ...
- 【iOS开发-68】APP下载案例:利用tableView自带的cell布局+缓存池cell复用时注意button状态的检查
(1)效果 (2)源码与资源下载 http://pan.baidu.com/s/1pJLo2PP (3)总结 --核心是利用UITableView里面自带的cell来制作样式同样的cell. 与之对应 ...
- iOS UICollectionView(转一) XIB+纯代码创建:cell,头脚视图 cell间距
之前用CollectionViewController只是皮毛,一些iOS从入门到精通的书上也是泛泛而谈.这几天好好的搞了搞苹果的开发文档上CollectionViewController的内容,亲身 ...
- 新浪微博客户端(22)-创建微博Cell
DJStatusCell.h #import <UIKit/UIKit.h> @class DJStatusCellFrame; @interface DJStatusCell : UIT ...
随机推荐
- Python文件对象的访问模式
- BZOJ5314:[JSOI2018]潜入行动——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5314 https://www.luogu.org/problemnew/show/P4516 ht ...
- BZOJ1070:[SCOI2007]修车——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1070 https://www.luogu.org/problemnew/show/P2053#sub ...
- lighttpd - 配置文件
转载其他网站,收藏查看! 配置文件lighttpd.conf参数详细说明的链接和选译 发表于 2010年12月22日 http://redmine.lighttpd.net/projects/ligh ...
- bzoj2431: [HAOI2009]逆序对数列(DP)
f[i][j]前i个数有j个逆序对的数量 f[i][j]=sigma(f[i-1][j-k]){1<=k<=i} 维护一个前缀和即可 #include<iostream> #i ...
- JS传递中文参数出现乱码的解决办法
一.window.open() 乱码: JS中使用window.open("url?param="+paramvalue)传递参数出现乱码,提交的时候,客户端浏览器URL中显示参数 ...
- 在eclipse中安装html编辑器插件
1.下载插件( 点击下载) 解压后得到GEF-ALL-3.4.1.zip和tk.eclipse.plugin.htmleditor_2.2.0.jar 2.安装GE ...
- (转)关于block使用的5点注意事项
1.在使用block前需要对block指针做判空处理. 不判空直接使用,一旦指针为空直接产生崩溃. if (!self.isOnlyNet) { if (succBlock == NULL) { // ...
- Nginx配置(一)
下载源码安装包:http://nginx.org 稳定版Nginx 1.6.2 tengine: 2.1.2 1.安装缺少依赖的包: (yum install jemalloc) yum -y ins ...
- 题解【luoguP4145 上帝造题的七分钟2(花神游历各国)】
题目链接 题解 题目大意: 一个序列,支持区间开方与求和操作. 算法:线段树实现开方修改与区间求和 分析: 显然,这道题的求和操作可以用线段树来维护 但是如何来实现区间开方呢 大家有没有这样的经历:玩 ...