ios 改变cell分割线高度_自定义UITableViewCell:Cell高度、分割线、间距等

2023-05-16

UITableView的强大更多程度上来自于可以任意自定义UITableViewCell单元格。

通常,UITableView中的Cell是

动态的,在使用过程中,会创建一个Cell池,根据每个cell的高度(即tableView:heightForRowAtIndexPath:返回

值),以及屏幕高度计算屏幕中可显示几个cell。而进行自定义TableViewCell无非是采用代码实现或采用IB编辑nib文件来实现两种方式,

本文主要收集代码的方式实现各种cell自定义。

如何动态调整Cell高度

- (UITableViewCell *)tableView:(UITableView *)tableView

cellForRowAtIndexPath:(NSIndexPath *)indexPath {

staticNSString*CellIdentifier=@"Cell";

UITableViewCell*cell

=[tableView

dequeueReusableCellWithIdentifier:CellIdentifier];

if(cell ==nil){

cell =[[[UITableViewCell alloc]

initWithFrame:CGRectZero reuseIdentifier:CellIdentifier]

autorelease];

UILabel*label =[[UILabel alloc]

initWithFrame:CGRectZero];

label.tag =1;

label.lineBreakMode =UILineBreakModeWordWrap;

label.highlightedTextColor =[UIColor

whiteColor];

label.numberOfLines =0;

label.opaque = NO;// 选中Opaque表示视图后面的任何内容都不应该绘制

label.backgroundColor =[UIColor clearColor];

[cell.contentView addSubview:label];

[label release];

}

UILabel*label

=(UILabel*)[cell viewWithTag:1];

NSString*text;

text =[textArray

objectAtIndex:indexPath.row];

CGRect cellFrame =[cell

frame];

cellFrame.origin

=CGPointMake(0,0);

label.text = text;

CGRect rect

=CGRectInset(cellFrame,2,2);

label.frame = rect;

[label sizeToFit];

if(label.frame.size.height

>46){

cellFrame.size.height =50+

label.frame.size.height -46;

}

else{

cellFrame.size.height =50;

}

[cell setFrame:cellFrame];

return cell;

}

-(CGFloat)tableView:(UITableView*)tableView

heightForRowAtIndexPath:(NSIndexPath*)indexPath

{

UITableViewCell*cell =[self

tableView:tableView cellForRowAtIndexPath:indexPath];

return

cell.frame.size.height;

}

如何用图片自定义Table

Separeator分割线

一般地,利用类似[tableView

setSeparatorColor:[UIColor

redColor]];语句即可修改cell中间分割线的颜色。那又如何用一个图片作为分割线背景呢?可以尝试如下:

方法一:

先设置cell separatorColor为clear,然后把图片做的分割线添加到自定义的custom cell上。

方法二:

在cell里添加一个像素的imageView后将图片载入进,之后设置tableView.separatorStyle =

UITableViewCellSeparatorStyleNone

自定义首行Cell与其上面导航栏间距

tableView.tableHeaderView = [[[UIView alloc] initWithFrame:CGRectMake(0,0,5,20)] autorelease];

自定义UITableViewCell的accessory样式 默认的accessoryType属性有四种取值:UITableViewCellAccessoryNone、

UITableViewCellAccessoryDisclosureIndicator、

UITableViewCellAccessoryDetailDisclosureButton、

UITableViewCellAccessoryCheckmark。

如果想使用自定义附件按钮的其他样式,则需使用UITableView的accessoryView属性来指定

UIButton*button;

if(isEditableOrNot){

UIImage*image =[UIImage

imageNamed:@"delete.png"];

button =[UIButton

buttonWithType:UIButtonTypeCustom];

CGRect frame

=CGRectMake(0.0,0.0,image.size.width,image.size.height);

button.frame = frame;

[button

setBackgroundImage:image forState:UIControlStateNormal];

button.backgroundColor

=[UIColor clearColor];

cell.accessoryView = button;

}else{

button =[UIButton

buttonWithType:UIButtonTypeCustom];

button.backgroundColor

=[UIColor clearColor];

cell.accessoryView = button;

}

以上代码仅仅是定义了附件按钮两种状态下的样式,问题是现在这个自定义附件按钮的事件仍不可用。

即事件还无法传递到

UITableViewDelegate的accessoryButtonTappedForRowWithIndexPath方法上。

当我们在上述代码 中在加入以下语句:

[button

addTarget:self action:@selector(btnClicked:event:)

forControlEvents:UIControlEventTouchUpInside];

后,

虽然可以捕捉到每个附件按钮的点击事件,但我们还无法进行区别到底是哪一行的附件按钮发生了点击动作!因为addTarget:方法最多允许传递两个参

数:target和event,这两个参数都有各自的用途了(target指向事件委托对象,event指向所发生的事件)。看来只依靠Cocoa框架已

经无法做到了。

但我们还是可以利用event参数,在自定义的btnClicked方法中判断出事件发生在UITableView的哪一个cell上。因为UITableView有一个很关键的方法indexPathForRowAtPoint,可以根据触摸发生的位置,返回触摸发生在哪一个cell的indexPath。而且通过event对象,正好也可以获得每个触摸在视图中的位置。

// 检查用户点击按钮时的位置,并转发事件到对应的accessory tapped事件

-(void)btnClicked:(id)sender event:(id)event

{

NSSet*touches =[event allTouches];

UITouch*touch =[touches anyObject];

CGPoint currentTouchPosition =[touch

locationInView:self.tableView];

NSIndexPath*indexPath =[self.tableView

indexPathForRowAtPoint:currentTouchPosition];

if(indexPath !=nil)

{

[self tableView:self.tableView

accessoryButtonTappedForRowWithIndexPath:indexPath];

}

}

这样,UITableView的accessoryButtonTappedForRowWithIndexPath方法会被触发,并且获得一个indexPath参数。通过这个indexPath参数,我们即可区分到底哪一行的附件按钮发生了触摸事件。

-(void)tableView:(UITableView*)tableView

accessoryButtonTappedForRowWithIndexPath:(NSIndexPath*)indexPath

{

int*idx =

indexPath.row;

//这里加入自己的逻辑

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ios 改变cell分割线高度_自定义UITableViewCell:Cell高度、分割线、间距等 的相关文章

  • 重装@angular/cli reason: write EPROTO 139955972261696:error:1408F10B:SSL routines:ssl3_get_record:wron...

    前几天不小心卸载了 angular 64 cli 然后重装的时候发现 xff0c 一直报错 如下 xff1a 64 ln622653 npm install g 64 angular cli npm ERR code EPROTO npm
  • Outlook2016删不掉主账户的解决方法

    控制面板 gt 账户 gt 邮件把配置文件删了 前两项和Outlook内部打开账户选项一样没用 进第三个 重启Oulook的时候会提示重新建一个配置 就OK了 转载于 https www cnblogs com haimingpro p 6
  • 新版新概念英语1-4册(英音+美音)MP3打包下载

    新版新概念英语第一册MP3 美音 新版新概念英语第一册MP3 英音 新版新概念英语第一册PDF 课文 新版新概念英语第二册MP3 美音 新版新概念英语第二册MP3 英音 新版新概念英语第二册PDF 课文 新版新概念英语第三册MP3 美音 新
  • linux远程windows无法输入,XRDP在Windows下用远程桌面连接,键盘失效有关问题

    XRDP在Windows下用远程桌面连接 xff0c 键盘失效问题 很久没上这个博客了 xff0c 最近在做虚拟化方面的东西 xff0c 有个需求是通过windows远程连接Linux桌面 xff0c 采用的是xrdp 安装和使用xrdp都
  • 3367 【模板】并查集

    题目描述 如题 xff0c 现在有一个并查集 xff0c 你需要完成合并和查询操作 输入输出格式 输入格式 xff1a 第一行包含两个整数N M xff0c 表示共有N个元素和M个操作 接下来M行 xff0c 每行包含三个整数Zi Xi Y
  • MySQL优化之my.conf配置详解

    最近项目不太忙 xff0c 所以有时间静心来研究下mysql的优化 xff0c 对于MySQL的设置是否合理优化 xff0c 直接影响到网站的速度和承载量 xff01 同时 xff0c MySQL也是优化难度最大的一个部分 xff0c 不但
  • NPM全局安装软件包时解决EACCES权限错误

    NPM全局安装软件包时解决EACCES权限错误 Resolving EACCES permissions errors when installing packages globally npm WARN checkPermissions
  • 阿里云学生服务器认证条件详解与选择教程

    简介 xff1a 本文汇总学生购买阿里云服务器以及其它云产品优惠 xff0c 阿里云的云翼计划 xff0c 是阿里云针对在校学生扶持的一项优惠活动 xff0c 只需9元即可购买阿里云服务器 xff0c 而且云服务器配置不低 xff0c 足够
  • deepin系统

    https www uc23 net xinwen 76259 html 据介绍 xff0c 深度操作系统 xff08 deepin xff09 自 2015 年开始 xff0c 就放弃基于 Ubuntu 作为上游 xff0c 选择 Ubu
  • Linux 大文件日志快速定位错误或者异常的位置

    1 得到错误日志或者异常日志的行号 cat n test log grep 34 error 34 cat n test log grep 34 exception 34 2 通过位置往前往后查看日志详细 339563 can not cl
  • 《oracle正则表达式》摘抄+自理

    select from t test regexp A B 1 AAA 2 bbb 3 4 xff01 xff01 xff01 5 吴雁渡 6 12345 7 123AAbb存储 64 xff01 64 445BBC 1 REGEXP LI
  • ASP.NET Core 3.0 : 二十四. 配置的Options模式

    上一章讲到了配置的用法及内部处理机制 xff0c 对于配置 xff0c ASP NET Core还提供了一种Options模式 ASP NET Core 系列目录 一 Options的使用 上一章有个配置的绑定的例子 xff0c 可以将配置
  • 区分柱状图(条形图)和直方图

    柱状图 61 条形图 柱状图一般用于描述离散型分类数据的对比每根柱子宽度固定 xff0c 柱子之间会有间距横轴变量可以任意排序 直方图 直方图一般用于描述连续型数据的分布关系每根柱子宽度可以不一样 xff0c 且一般没有间距横轴变量有一定顺
  • Latex公式字母加粗

    在Latex 中 xff0c 公式字母加粗用语法 xff1a boldsymbol 待添加的字母 xff0c 如 xff1a boldsymbol bold 61 frac 1 boldsymbol w s t boldsymbol x 4
  • [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web app...

    问题 启动tomcat 就一直卡在了这里 继续往上查看日志 解决方法 xff1a 转载于 https www cnblogs com chenyanlong p 10699434 html
  • ccf 画图

    问题描述 试题编号 xff1a 201409 2试题名称 xff1a 画图时间限制 xff1a 1 0s内存限制 xff1a 256 0MB问题描述 xff1a 问题描述 在一个定义了直角坐标系的纸上 xff0c 画一个 x1 y1 到 x
  • Pigx官方文档地址

    https www kancloud cn lengleng pig guide 949171 转载于 https www cnblogs com mengjianzhou p 11229623 html
  • Linux IPC实践(11) --System V信号量(1)

    信号量API include lt sys types h gt include lt sys ipc h gt include lt sys sem h gt int semget key t key int nsems int semf
  • linux ubuntu 分区,查看Ubuntu分区列表方法

    今天在Ubuntu修复Grub正好碰到了要展示分区列表看看 不然都不清楚哪个是哪个了 sudo fdisk l 就是这个命令 ubuntu 64 ubuntu sudo fdisk l Disk dev sda 250 0 GB 25005
  • 用LED实现流水灯和用按键控制LED的亮灭

    前言 恒子之后的系列文章都是为了记录自己在跟着韦东山老师学习嵌入式Linux开发过程中自己所学知识的梳理与总结 若恒子的学习记录对您有帮助 xff0c 那么将是我莫大的荣幸 xff1b 如果文章当中有写得不当的地方 xff0c 还望您指出

随机推荐