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样式不发生变化的情况。的更多相关文章

  1. 如何得到自定义UITableViewCell中的按钮所在的cell的indexPath.row

    在自定义UITableViewCell中创建了一个按钮. 想在点击该按钮时知道该按钮所在的cell在TableView中的行数.就是cell的 indexPath.row两种方法都很好.-(IBAct ...

  2. iOS开发——UI进阶篇(三)自定义不等高cell,如何拿到cell的行高,自动计算cell高度,(有配图,无配图)微博案例

    一.纯代码自定义不等高cell 废话不多说,直接来看下面这个例子先来看下微博的最终效果 首先创建一个继承UITableViewController的控制器@interface ViewControll ...

  3. iOS回顾笔记(08) -- 自定义Cell的类型和创建步骤总结

    iOS回顾笔记(08) -- 自定义Cell的类型和创建步骤总结 项目中我们常见的自定义cell主要分为两种 等高cell:如应用列表.功能列表 非等高cell:如微博列表.QQ聊天页面 下面对这 ...

  4. tableView 选中cell时,获取到当前cell

    // >> 找到当前选中的cell,设置选中时的cell背景色 SideTableViewCell * cell = (SideTableViewCell *)[tableView cel ...

  5. 关于collectionView和tableView的两种cell的出列方法的区别

    相信好多人一定会对collectionView和tableView的两种cell出列方法有所疑问,下面以UICollection为例子进行举例说明 假设我们已经创建了一个collectionView, ...

  6. 使用 StoryBoard 制作一个能够删除cell的TableView

    本篇博客方便自己检索使用.资源链接 下面是制作效果图,点击删除按钮,就能将该cell删除: 下面是主要的代码: #define KSUPER_TAG 20000 #define KDEFAU_TAG ...

  7. 【iOS开发-68】APP下载案例:利用tableView自带的cell布局+缓存池cell复用时注意button状态的检查

    (1)效果 (2)源码与资源下载 http://pan.baidu.com/s/1pJLo2PP (3)总结 --核心是利用UITableView里面自带的cell来制作样式同样的cell. 与之对应 ...

  8. iOS UICollectionView(转一) XIB+纯代码创建:cell,头脚视图 cell间距

    之前用CollectionViewController只是皮毛,一些iOS从入门到精通的书上也是泛泛而谈.这几天好好的搞了搞苹果的开发文档上CollectionViewController的内容,亲身 ...

  9. 新浪微博客户端(22)-创建微博Cell

    DJStatusCell.h #import <UIKit/UIKit.h> @class DJStatusCellFrame; @interface DJStatusCell : UIT ...

随机推荐

  1. 2017中国大学生程序设计竞赛-哈尔滨站 A - Palindrome

    Palindrome Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Tota ...

  2. 存储引擎(Mysql)

    最常使用的2种存储引擎:1.Myisam是Mysql的默认存储引擎,当create创建新表时,未指定新表的存储引擎时,默认使用Myisam.每个MyISAM在磁盘上存储成三个文件.文件名都和表名相同, ...

  3. TCP中三次握手建立和四次握手释放以及相关问题

    本文基于个人所学和网上博文所整理,若有不妥处,欢迎留言指出 TCP连接过程中标志位的意义: 字符缩写 描述 SYN 同步序号,表示此报文是一个连接请求或连接接受报文 ACK 确认位,对接收到的报文的确 ...

  4. srtlen实现以及与sizeof的比较

    这里仅为个人整理,大部分来自百科  一.strlen函数 strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第 ...

  5. SRM12 T2夏令营(分治优化DP+主席树 (已更新NKlogN)/ 线段树优化DP)

     先写出朴素的DP方程f[i][j]=f[k][j-1]+h[k+1][i] {k<i}(h表示[k+1,j]有几个不同的数)  显然时间空间复杂度都无法承受   仔细想想可以发现对于一个点 i ...

  6. The Shortest Path in Nya Graph HDU - 4725

    Problem Description This is a very easy problem, your task is just calculate el camino mas corto en ...

  7. Friendship POJ - 1815 基本建图

    In modern society, each person has his own friends. Since all the people are very busy, they communi ...

  8. nginx 报invalid pid number

    /opt/ibis/sbin/nginx -c /opt/ibis/conf/nginx.conf 这是make make install之后生成的文件夹和文件. -c c是configure的缩写 ...

  9. 图论:最短路-SPFA

    该算法由Bellman-Ford算法演变过来,首先介绍一下Bellman-Ford算法 最短路最多经过n-1个点,可以用n-1轮松弛操作来得到 ;i<n;i++) d[i]=INF; d[]=; ...

  10. 「模板」 线段树——区间乘 && 区间加 && 区间求和

    「模板」 线段树--区间乘 && 区间加 && 区间求和 原来的代码太恶心了,重贴一遍. #include <cstdio> int n,m; long l ...