文档章节

iOS-TableViewCell.xib创建多个样式的Cell

JoshSone
 JoshSone
发布于 2016/11/01 11:27
字数 489
阅读 391
收藏 0

在我们复用cell时,如果每个cell的布局不同,如实现以下的布局:

我们接下来用Xib文件来进行实现

1.创建TableViewCell文件,在Xib文件中生成6个Cell,并设置每个Cell的identifier,为了方便起见,我这里将其设置为数字0~5

2.在ViewController.m中创建Cell

TableViewCell*cell=[tableView dequeueReusableCellWithIdentifier:(nonnull NSString *)];
if (cell==nil) {
 cell=[[[NSBundle mainBundle]loadNibNamed:@"TableViewCell" owner:nil options:nil]
objectAtIndex:(NSUInteger)];
}
        return cell;

这几行代码是正常复用cell的流程,可以看到,identifier后面接当前Cell的识别码,index后面要加当前Cell所在位置。

例如:第一个Cell就是

TableViewCell*cell=[tableView dequeueReusableCellWithIdentifier:@"0"];
        if (cell==nil) {
            cell=[[[NSBundle mainBundle]loadNibNamed:@"TableViewCell" owner:nil options:nil]
firstObject];
        }

第二个Cell是

 TableViewCell*cell=[tableView dequeueReusableCellWithIdentifier:@"1"];
        if (cell==nil) {
            cell=[[[NSBundle mainBundle]loadNibNamed:@"TableViewCell" owner:nil options:nil]
objectAtIndex:1];
        }

所以在上面加一个判断语句,确定当前Cell的信息

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)
indexPath{
    NSString*identifier=0;
    NSInteger index=0;
//判断在第几组
    if (indexPath.section==0) {
        switch (indexPath.row) {
            case 0:
                identifier=@"0";
                index=0;
                break;
            case 1:
                identifier=@"1";
                index=1;
                break;
            case 2:
                identifier=@"2";
                index=2;
               break;
                
            default:
                break;
    }
    }else{
        switch (indexPath.row) {
            case 0:
                identifier=@"3";
                index=3;
                break;
            case 1:
                identifier=@"4";
                 index=4;
                break;
            case 2:
                identifier=@"5";
                 index=5;
                break;
                
            default:
                break;
        }
    }
    
        TableViewCell*cell=[tableView dequeueReusableCellWithIdentifier:identifier];
        if (cell==nil) {
            cell=[[[NSBundle mainBundle]loadNibNamed:@"TableViewCell" owner:nil options:nil]
objectAtIndex:index];
        }
        return cell;
}

3.可以把创建Cell的过程,在Cell.m文件中进行,以免ViewController中代码过多

TableViewCell.h

+(instancetype)setupCellWith:(UITableView*)tableView AtIndexPath:(NSIndexPath *)indexPath;

TableViewCell.m

+(instancetype)setupCellWith:(UITableView*)tableView AtIndexPath:(NSIndexPath *)indexPath{
    NSString*identifier=0;
    NSInteger index=0;
    if (indexPath.section==0) {
        switch (indexPath.row) {
            case 0:
                identifier=@"0";
                index=0;
                break;
            case 1:
                identifier=@"1";
                index=1;
                break;
            case 2:
                identifier=@"2";
                index=2;
                break;
                
            default:
                break;
                
        }
    }else{
        switch (indexPath.row) {
            case 0:
                identifier=@"3";
                index=3;
                break;
            case 1:
                identifier=@"4";
                index=4;
                break;
            case 2:
                identifier=@"5";
                index=5;
                break;
                
            default:
                break;
                
        }
    }
    
    TableViewCell*cell=[tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell==nil) {
        cell=[[[NSBundle mainBundle]loadNibNamed:@"TableViewCell" owner:nil options:nil]
objectAtIndex:index];
    }
    return cell;
}

ViewController.m文件中

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)
indexPath{
    TableViewCell*cell=[TableViewCell setupCellWith:tableView AtIndexPath:indexPath];
    return cell;
   }

4.把控件拖到Cell中

 

 

这样我们的布局就完成了ಠ౪ಠ

 

© 著作权归作者所有

JoshSone
粉丝 7
博文 76
码字总数 32794
作品 0
长春
iOS工程师
私信 提问
加载中

评论(1)

小码爱大牛
小码爱大牛
你好,我是深圳一家以家居安防为核心的智能家居公司的HR在招聘一位iOS开发架构师兼leader。不知道您自己或者身边同事朋友有没有在看工作机会的呢?如果感兴趣可以发简历到3288771685@qq.com或者加QQ。
iOS11 UITableView reloadData 界面跳动问题

在 iOS11.的系统上当 UITableView 设置高度固定 rowHeight = xxx; 时,如果tableView滚动到最底部,此时如果刷新tableView会出现tableView向上方跳动一段距离的现象 。 既然只是在iOS 11系统...

zh_iOS
2018/09/03
334
0
在iOS中运用React Component的思路,效率更高的开发UI,更好的复用UI组件

最近一直在看React的一些东西,其实很早前就想开始重拾前端,但是一直提不起兴趣再去看JavaScript,对CSS这种布局方式也不是很来感,说白了,就是懒吧😂。去年年底开始在公司app里开始尝试...

Kobe_Dai
04/03
0
0
QMUI iOS UI 框架正式发布

QMUI iOS QMUI iOS 是一个致力于提高项目 iOS UI 开发效率的解决方案,其设计目是用于辅助快速搭建一个具备基本设计还原效果的 iOS 项目,同时利用自身提供的丰富控件及兼容处理,让开发者能...

kayo5994
2017/01/03
3.8K
2
iOS开发技巧(系列十:UITableView及其Cell的一些细节)

今天看开源代码,有些UITableView方面细节的东西,整理了与大家共享, 1、设置UITableViewCell的accessoryView 有时候我们需要设置cell的一些样式,比如下图, 这个就是设置了cell的accesso...

召唤攻城狮
2014/05/09
2.3K
0
iOS 如何解决UITableView刷新卡顿现象

对之前的项目总结一下: 事情是这样的,我需要在定制Cell完成新闻类app的展示 虽然说SDWebImage提供了一个方法,异步加载图片到UIImageView上 但是,有些时候。需要的图片并不是需要铺满UII...

萨斯辈的呼唤
2014/08/18
3.5K
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
昨天
64
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
昨天
26
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
昨天
43
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
昨天
27
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
昨天
44
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部