澄清 UITableViewCell 在高亮事件上的未记录行为

Posted

技术标签:

【中文标题】澄清 UITableViewCell 在高亮事件上的未记录行为【英文标题】:Clarify undocumented behavior of UITableViewCell on highlight event 【发布时间】:2011-04-28 18:54:05 【问题描述】:

UITableViewCell 在单元格突出显示时修改其 contentView 层次结构的内容(用户触摸单元格)。

迄今为止我发现的两个例子:

在单元格的 contentView 中放置一个 UIView 并带有背景色。当表格单元格突出显示时,该 UIView 的背景颜色将被移除(显然已设置为具有清晰的背景。) 在 contentView 中放置一个 UIButton。当单元格突出显示时,按钮也被强制进入突出显示状态。

就好像 UITableView 单元格中有一些逻辑检查单元格的层次结构中的所有视图并根据一组神秘的规则修改它们,然后一旦单元格被取消突出显示,它们就会恢复正常。

谁能解释 UITableViewCell 在我的自定义表格视图单元格的内容中修改了什么以及为什么修改(出乎意料且以未记录的方式)?

谢谢!

【问题讨论】:

【参考方案1】:

UITableViewCell 的突出显示在Apple docs 中记录如下:

突出显示会影响 标签、图像的外观和 背景。当突出显示 单元格的状态设置为 YES,标签 以突出显示的文本绘制 颜色(默认为白色)。默认 值是否。如果你设置 通过此突出显示状态为 YES 财产,向新的过渡 状态外观没有动画。为了 动画高亮状态 过渡,见 setHighlighted:animated: 方法。

请注意,为了突出显示工作 正确地,您必须获取单元格的 使用 textLabel 的标签和 detailTextLabel 属性和设置 每个标签的 highlightTextColor 财产;对于图像,获取单元格的 使用 imageView 属性的图像和 设置 UIImageView 对象的 highlightImage 属性。

这里没有提到 UIButtons,但this post 是关于如何防止按钮在单元格出现时进入高亮状态。

【讨论】:

感谢您,虽然这只是部分文档 - 它没有讨论任意 UIView backgroundColor 属性如何也更改为 clear,因此它绝对是一个不完整的解释。我想把它改变的所有东西都变成答案。但是,您链接到的解决方案 - 通过覆盖 setHighlighted:animated: 和 setSelected:animated: 来实现自定义突出显示/选择状态 - 确实允许我完全防止发生混合/未记录的突出显示更改,方法是不调用覆盖中的超级方法自己做所有事情。

以上是关于澄清 UITableViewCell 在高亮事件上的未记录行为的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 处于高亮状态时如何执行操作?

关于绘制高亮 UITableViewCell 的问题

如何在 Swift 中的 UITableViewCell 上添加带有单击事件的按钮?

UITableViewCell上的按钮点击事件处理

为 UITableViewCell 上的特定按钮删除 UIButton 事件的链接

JS实战 · 表格行颜色间隔显示,并在鼠标指定行上高亮显示