使用UITableViewCell的自定义子类

Link Address:http://book.51cto.com/art/200903/117518.htm

使用UITableViewCell的自定义子类。

转载的这篇博客,给我提供了一个如何自定义TableViewCell的简单的解决方案。

PS:我在该篇博客的基础上添加了写自己的内容。

>>>Begine

我们很幸运,可以使用Interface Builder设计表视图单元。我们将使用Interface Builder重新创建与刚才使用代码构建的界面相同的两行界面。要达到此目的,可以创建一个UITableViewCell子类和一个包含表视图单元的新nib文件。然后,当我们需要一个表视图单元来表示一行时,不是向标准的表视图单元添加子视图,而是从nib文件加载子类,并使用将添加的两个输出口来设置名称和颜色。有道理吗?让我们开始付诸行动吧。

在Xcode中右键单击(或Ctrl+单击)Classes文件夹,从出现的Add子菜单中选择New File…,或者按下 键。新建文件向导出现后,从左侧窗格选择Cocoa Touch Classes,然后从右上窗格选择UITableViewCell子类。单击Next按钮,将新文件命名为CustomCell.m,并确保选中了Also Create"CustomCell.h"复选框。

创建文件之后,在Xcode中右键单击Resources文件夹,再次选择Add→New File…。这一次,在新建文件向导的左侧窗格中单击User Interfaces,在右上窗格中选择Empty XIB。当提示输入名称时,输入CustomCell.xib。

1. 创建UITableViewCell子类

创建所有必要的新文件之后,下面让我们继续创建UITableViewCell的新子类。

我们将在子类中使用输出口,这会简化对需要在每一行更改的值的设置。我们可以再次使用标记(tag),这完全避免了创建子类,而使用这种方式,代码会更加简明并容易阅读,因为我们可以仅通过设置属性来设置每一行单元上的标签,如下所示:

cell.namelabel = @"love";

单击CustomCell.h,添加以下代码:

#import <UIKit/UIKit.h>

@interface CustomCell : UITableViewCell

{

IBOutlet UILabel *NameLabel;

IBOutlet UILabel *ColorLabel;

IBOutlet UIImageView *Img;

}

@property(nonatomic,retain) UILabel *NameLabel;

@property(nonatomic,retain) UILabel *ColorLabel;

@property(nonatomic,retain) UIImageView *Img;

@end

这就是我们需要添加的所有内容,下面切换到CustomCell.m,并添加两行代码:

#import "CustomCell.h"

@implementation CustomCell

@synthesize NameLabel;

@synthesize ColorLabel;

@synthesize Img;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {

if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {

// Initialization code

}

return self;

}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

[super setSelected:selected animated:animated];

// Configure the view for the selected state

}

- (void)dealloc {

[super dealloc];

}

保存上面的代码,并准备好自定义子类。

2. 在Interface Builder中设计表视图单元

下一步,双击CustomCell.xib,在Interface Builder中打开文件。这个主窗口中只有两个图标:File's owner和First Responder。在库中找到表视图单元(参见图8-14),然后把它拖动到主窗口中。



然后,按下 ,打开大小检查器,将表视图单元的高度从44改为65。这会让我们有更多的活动空间。确保选中了表视图单元,然后按下 ,打开标识检查器。将类从UITableViewCell改为CustomCell。

最后,按下 ,打开属性检查器。其中第一个字段是Identifier,它是我们在代码中使用过的可重用的标识符。如果记不起来这一内容,请查阅本章前面的内容并找到SimpleTableIdentifier。将Identifier设置为CustomCell- Identifier。下一步,找到名称为Accessory的弹出按钮,把Detail Discloure改为None(参见图8-15)。扩展图标会在单元中占用一些空间,但是我们希望整个单元空间都归自己所用。下一章将详细地讨论扩展图标。

图8-15 关闭扩展图标


记住,即使UITableViewCell是UIView的子类,它仍然使用内容视图对子视图进行保存和分组。双击Custom Cell图标,将打开一个新的窗口,你会发现一个标记为Content View的灰色虚线圆角矩形(参见图8-16)。

图8-16 表视图单元的窗口
图8-17 表视图单元的设计

Interface Builder通过这种方式告诉你应该添加一些内容,因此在库中找到View并把它拖到Custom Cell窗口中。

发布视图之后会发现它的大小和窗口大小不一致,还要进行调整。选中新的视图,打开大小检查器。通过将x设置为0,y设置为0,w设置为320,h设置为65,把View的大小和位置改为符合Custom Cell窗口的大小。

现在所有项都设置完成了。我们有了一个画布,可以使用它在Interface Builder中设计表视图单元。下面就开始吧。

从库中拖动4个标签到Custom Cell窗口,按照图8-17所示进行布局和重命名。要将Name:和Color:设置为黑体,选中它们并按下 。下一步,选中右上方的标签,增加其宽度,将其右边缘拖到右边的蓝线。按同样方式更改右下位置的标签。这样做的目的是让名称和颜色数据拥有更大的显示空间。

现在,按下Control键,并将Custom Cell图标拖到视图右上位置的标签,为它指定nameLabel输出口。然后,按下Control键,把Custom Cell图标再次拖到右下位置的标签,为它指定colorLabel输出口。

你可能很奇怪为什么我们没有做任何和File's Owner图标有关的事情。原因是根本不需要。我们使用这个表单元显示数据,不过与用户的所有交互都是通过表视图来完成的,因此它不需要自己的控制器类。我们实际上只是使用nib作为一种模板,以便可视地设计表单元。

保存nib并将其关闭,然后返回Xcode。

3. 使用新的表视图单元

要使用我们设计的单元,必须对CellsViewController.m中的talbeView:cellForRow- AtIndexPath方法做一些大的改动。删除当前的talbeView:cellForRowAtIndexPath方法,用下面的新版本代替:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

  static NSString *CustomCellIdentifier = @"CustomCellIdentifier";

  CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CustomCellIdentifier];

  if (cell==nil)

  {

    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell"

        owner:self

       options:nil];

    cell = [nib objectAtIndex:0];//这里是设置成0,而不是1,因为数组的count属性==1

  }

  NSInteger row = [indexPath row];

  NSDictionary *rowData = [self.ListData objectAtIndex:row];

  UIImage *img = [UIImage imageNamed:@"1.png"];

  cell.ColorLabel.text =[rowData objectForKey:@"Color"];

  cell.NameLabel.text = [rowData objectForKey:@"Name"];

  cell.Img.image = img;

  return cell;

}

更改CellsViewController.m时,在接近顶部的位置添加此行:

#import"CustomCell.h"

由于我们在nib文件中设计了表视图单元,因此,如果没有可重用的单元,只需从nib文件中加载即可。我们在objectAtIndex:调用中使用索引值1而不是0,因为对象0是文件的所有者,它并不是我们想要的。First Responder不是由loadNibNamed:owner:options:返回的,因此表视图单元的索引值为1。

(不过我感觉,这点好像写错了,如果写1,代码报错,后来跟踪程序,发现返回的nsArray数组里面就只有一个成员,也就是count为1,所以这里我就修改为0

系统就能够正常运行了)

设置表格Cell的高度

参考代码如下所示:

-(NSInteger)tableView:(UITableView *)tableView

numberOfRowsInSection:(NSInteger)section

{

tableView.rowHeight = 66;//设置行的高度

return [self.ListData count];

}

附加代码:

-(void)viewDidLoad

{

NSDictionary *dic_1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"Macbook",@"Name",@"whilte",@"Color",nil];

   NSDictionary *dic_2 = [[NSDictionary alloc] initWithObjectsAndKeys:@"Lenovol",@"Name",@"Blue",@"Color",nil];

  NSDictionary *dic_3 = [[NSDictionary alloc] initWithObjectsAndKeys:@"Thinkpad",@"Name",@"Black",@"Color",nil];


NSArray *tmpArray = [[NSArray alloc] initWithObjects:dic_1,dic_2,dic_3,nil];

self.ListData = tmpArray;

[dic_1 release];

[dic_2 release];

[dic_3 release];

[tmpArray release];

[super viewDidLoad];

}

运行效果如下图所示:

几种UITableview自定义Cell的办法 UITableview注册cell(registerNib / registerClass) 阅读详情

相关推荐

python 中心线提取_二值分析 | OpenCV + skimage如何提取中心线

点击上方蓝字关注我们微信公众号:OpenCV学堂关注获取更多计算机视觉与深度学习知识问题前几天有个人问了我一个问题,问题是这样的,他有如下的一张二值图像:怎么得到白色Blob中心线,他希望的效果如下:显然OpenCV中常见的轮廓分析无法获得上面的中心红色线段,本质上这个问题是如何提取二值对象的骨架,提取骨架的方法在OpenCV的扩展模块中,另外skimage包也支持图像的骨架提取。这里就...

weixin_42204453的博客 4290

UITableView 自定义UITableViewCell

自定义UITableViewCell 步骤: 这里拿带有checkBox按钮的UITableViewCell作为例子。先上效果图 先新增加个类:CheckBoxCell继承自UITableViewCell。 分别修改CheckBoxCell.h和CheckBoxCell.m.增加4个输出口: IBOutlet UIImageView *theImage;     IBOutlet

yesjava的专栏 3743

【社区分享】从零开始学习 TinyML,建立 TensorFlow 深度学习模型(技术优化篇)

本文来自社区投稿与征集,作者王玉成,ML&IoT Google Developers Expert,温州大学智能锁具研究院总工程师。 了解更多:https://blog.youkuaiyun.com/wfing 经过前面几章的讨论,我们了解了TinyML 的概念,完成了一个最简单的TinyML 的模型并且运行在微控制器上,得出最基本的结果。但是在实际的工程应用中,模型建立之后,也需要再进一步结合许多优化方面的技术,这就是我们接下来想要探讨的。 5. 优化 TinyML 这本书也详细的向我...

tensorflowforum的博客 1万+

SWTableViewCell——一个和iOS 7的系统Mail类似,使用起来简单的UITableViewCell子类

GitHub链接: https://github.com/CEWendel/SWTableViewCell IOS 8已经开放了相应API, 但是项目往往需要向前兼容,所以要采取自定义方法来实现 IOS8 使用线面的方法,可以轻松实现自定义tableViewCell的自定义编辑按钮,但是为了兼容IOS7,只能自己实现 - (nullable NSArrayUITableV

zxwcool123的专栏 1361

从命名玄学看单片机江湖:STC、STM32与ESP32的型号密码与设计哲学

本文解析了STC、STM32和ESP32三大主流单片机系列的型号命名规则,揭示了其背后的设计哲学与市场策略。通过详细解读STC89C52、STM32F103C8T6等具体型号,帮助开发者理解芯片核心特性、性能等级及适用场景,为嵌入式系统选型提供实用指南。

g5h6i的博客 761

DeepSeek-V4 本地部署实战指南:4套方案从入门到企业级(附RTX 5090实测数据)

V4-Flash 便宜是便宜,输入 1 元/M token,输出 2 元/M token,但量大了还是肉疼。V4-Pro 更离谱,输入 12 元/M token,输出 24 元/M token,这价格要是天天调用,月账单轻松破万。用 4-bit 量化跑 V4-Flash,显存占用 ~22GB,延迟 ~80ms/token,并发能到 2-3 路。换句话说,同样的硬件,能跑更长的上下文、更大的并发。Flash 是「小而美」,一张 RTX 4090/5090 就能跑,门槛低,效果够用。

datayx的文章 9814

使用UITableViewCell子类是出现的问题

首先项目中使用的是UITableViewCell,但是在iPad上面会有左右缩进的问题,所以自己写了一个子类,在layoutSubviews方法中将子控件的坐标变换一下,解决了。 但是有一个界面就是不调用这个方法,查看cellforrow方法时,确实也是替换了,然后就想到可能是创建UITableView的时候也注册了cell,所以使用的还是UITableViewCell,结果证实是真的。...

jianghui12138的博客 268

微波无源器件 功分器1 新型方波导双模无功功分器

本名证明了一种基于有着特定功能的(dedicated)T性匹配元件(散射件)的进化结点的新型波导双模两路功分器的可行性。这个散射件,有着面向三个部分的匹配部分,提供了等效功分并且朝着对应的输出端口传输矩形波导的两个TE10/TE01正交模式。所提出的设计紧凑,易于比例变化并且能够级联来获得。

qq_45245770的博客 1390

ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

转自: ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局 一、实现效果   二、使用纯代码自定义一个tableview的步骤 1.新建一个继承自UITableViewCell的类 2.重写initWithStyle:reuseIdentifier:方法 添加所有需要显示的子控件(不需要设置子控件的数据和fr

robinson_911的专栏 983

英特尔® NUC迷你电脑实现无人值守自动开机配置指南

本文详细介绍了如何配置英特尔® NUC迷你电脑实现无人值守自动开机功能。从BIOS设置到操作系统级配置,涵盖硬件兼容性确认、电源恢复功能设置及常见问题解决,帮助用户轻松实现设备断电后自动恢复运行,适用于家庭服务器、企业终端等多种场景。

weixin_42638178的博客 472

1、JMP脚本编程全面指南:从基础到高级应用

本博客全面介绍了JMP脚本编程的各个方面,从JMP基础和JSL入门,到数据类型、数据结构、编程方法、数据表操作、图形与三维场景脚本,再到应用程序创建与扩展功能。内容涵盖脚本工具使用、常见任务实现、兼容性说明及未来发展趋势,旨在帮助用户掌握JMP脚本语言的强大功能,提升数据分析的自动化与定制化能力。适合从初学者到高级用户的深入学习与实践参考。

flink9streamer的博客 266

UITableViewCell自定义子类

使用UITableViewCell的自定义子类。 转载的这篇博客,给我提供了一个如何自定义TableViewCell的简单的解决方案。 PS:我在该篇博客的基础上添加了写自己的内容。 >>>Begine 我们很幸运,可以使用Interface Builder设计表视图单元。我们将使用Interface Builder重新创建与刚才使用代码构建的界面相同的两行界面。要达到此目的,可以创建一个

vrix的专栏 896

【C++】构造函数之初始化列表(Initialization list of constructors)

本讲主要是构造函数的初始化列表的讲节,但是本节很重要,可以关乎后面写项目

m0_62599305的博客 2232

Swift之自定义UITableViewCell

在做微博项目的开发过程中,自定义cell的过程总结 1、新建一个继承自UITableViewCell的子类 2、在init(frame)方法中进行子控件的初始化 -> 将有可能显示的所有子控件都添加到contentView中 -> 设置子控件的基础属性(字体、颜色、背景) 3、提供两个模型 -> 数据模型 -> frame模型(数据模型、所有子控件的frame、Cell的高度) 4

Francis-ChinaFeng 1012

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

UITableView详解(UITableViewCell(二) 自定义cell)

上一节中,我们定义的cell比较单一,只是单调的输入文本和插入图片,但是在实际开发中,有的cell上面有按钮,有的cell上面有滑动控件,有的cell上面有开关选项等等,具体参加下面2个图的对比: @我们可以通过2种方式来实现自定义,一是利用系统的UITableViewCell(但不推荐,因为开发效率不高),举例:还是在这个关键方法中 - (UITableViewCell *)tableV

iOS界@迷糊小书童 2494

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

对自定义UITableViewCell的理解

自定义UITableViewCell有两种方法:1.较早版本 子类UITableViewCell 并利用xib构造2.利用storyboard直接自定义cell1.利用xib设计好自定义的cell并且连接好控件后 有两种方法引用我们自己的cell方法1:-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtInde

wuruiaoxue的专栏 391

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【转】UITableView详解(UITableViewCell

原文网址:http://www.kancloud.cn/digest/ios-1/107420 上一节中,我们定义的cell比较单一,只是单调的输入文本和插入图片,但是在实际开发中,有的cell上面有按钮,有的cell上面有滑动控件,有的cell上面有开关选项等等,具体参加下面2个图的对比: @我们可以通过2种方式来实现自定义,一是利用系统的UITableViewCell(但...

weixin_30312659的博客 88

UITableView 系列五 :自定义UITableViewCell (实例)

有时候我们需要自己定义UITableViewCell的风格,其实就是向行中添加子视图。添加子视图的方法主要有两种:使用代码以及从.xib文件加载。当然后一种方法比较直观。 我们这次要自定义一个Cell,使得它像QQ好友列表的一行一样:左边是一张图片,图片的右边是三行标签: 当然,我们不会搞得这么复杂,只是有点意思就行。 1、运行Xcode 4.2,新建一个Single View Appl

小生我怕怕 559

自定义UITableViewCell的几种方法

自定义cell的三种方式。 (1) uitableviewcell的子类自定义cell 1.新建一个类继承自uitableviewcell。 2。初始化方法中添加自己的控件 - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {     self

一枝红杏出墙来 5455

13 自定义cell、cell自适应高度、 多种类型的cell混合使用、 UITableViewController、model类

1.自定义cell自定义cell就是创建一个UITableViewCell的子类。 把cell上的控件创建都封装在子类中,简化UIViewController中的代码 子视图控件添加到cell的contentView上。 //注册自定义的单元格 [self.tableView registerClass:[CustomTableViewCell class] forCellReuseId

康大亮学IOS 427
上一篇: 查找 EXC_BAD_ACCESS 问题根源的方法
下一篇: 【免费】业务流程管理系统下载
piperzero
博客等级 码龄21年 1377粉丝 504原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值