选择时在自定义 UITableViewCell 中调暗 UIImageView
Posted
技术标签:
【中文标题】选择时在自定义 UITableViewCell 中调暗 UIImageView【英文标题】:Dimming UIImageView in Custom UITableViewCell when selected 【发布时间】:2017-07-21 13:27:33 【问题描述】:我实现了一个自定义 UITableView 单元格。
一切都很好,直到我点击了我的表格视图单元格。
当我点击它时,通常一个表格视图单元格会变暗。
这是因为 cell.selectionStyle 设置为 .default,并且 UITableViewCell 的子类通过调用 setHighlighted(_ highlight: Bool, animated: Bool) 使自身变暗。
我的问题是,在我的表格中选择一行(单元格)时,除了 UITableViewCell 内容视图中包含的 UIImageView 之外的所有内容都会正确变暗。
我尝试在我的 UIImgeView 顶部添加一个黑色 UIView 叠加层,并覆盖我的自定义 tableview 单元格的 setHighlighted 以改变 UIView 的不透明度以匹配其余单元格内容。然而,这种影响不仅每次都无法可靠地触发,而且它也不会与其他单元组件携带相同的动画。覆盖层的不透明度变化是即时的,而 ios 提供的默认调光效果是渐进的。
我真的很感激任何见解。我想这是许多其他人可能遇到的问题,但谷歌搜索没有产生任何结果。谢谢你。以防万一,我在下面包含了我的自定义 UITableViewCell 的代码。
import UIKit
class HouseTableViewCell: UITableViewCell
var houseThumbnail: UIImageView!
var houseName: UILabel!
var houseRating: UILabel!
var houseReviewCount: UILabel!
var houseRent: UILabel!
var imageDim: UIView!
override init(style: UITableViewCellStyle, reuseIdentifier: String!)
super.init(style: UITableViewCellStyle.value1, reuseIdentifier: reuseIdentifier)
houseThumbnail = UIImageView()
self.contentView.addSubview(houseThumbnail)
houseName = UILabel()
self.contentView.addSubview(houseName)
houseRating = UILabel()
self.contentView.addSubview(houseRating)
houseReviewCount = UILabel()
self.contentView.addSubview(houseReviewCount)
houseRent = UILabel()
self.contentView.addSubview(houseRent)
imageDim = UIView()
imageDim.backgroundColor = UIColor.black.withAlphaComponent(0.0)
self.contentView.addSubview(imageDim)
required init(coder aDecoder: NSCoder)
fatalError("init(coder:) has not been implemented")
func makeConstraints()
houseThumbnail?.snp.makeConstraints (make) -> Void in
make.width.equalToSuperview().dividedBy(2)
make.height.equalToSuperview()
make.left.equalToSuperview()
houseName?.snp.makeConstraints (make) -> Void in
make.width.equalToSuperview().dividedBy(2)
make.height.equalTo(30)
make.right.equalToSuperview()
make.top.equalToSuperview()
houseRating.snp.makeConstraints (make) -> Void in
make.height.equalTo(30)
make.top.equalTo(houseName.snp.bottom)
make.left.equalTo(self.snp.centerX)
houseReviewCount.snp.makeConstraints (make) -> Void in
make.height.equalTo(30)
make.top.equalTo(houseName.snp.bottom)
make.right.equalToSuperview()
houseRent.snp.makeConstraints (make) -> Void in
make.width.equalToSuperview().dividedBy(2)
make.height.equalTo(30)
make.right.equalToSuperview()
make.bottom.equalToSuperview()
imageDim.snp.makeConstraints (make) -> Void in
make.width.height.top.left.equalTo(houseThumbnail)
override func awakeFromNib()
super.awakeFromNib()
// Initialization code
override func setHighlighted(_ highlighted: Bool, animated: Bool)
super.setSelected(highlighted, animated: animated)
/* Logic to dim imageview */
if highlighted
imageDim.backgroundColor = UIColor.black.withAlphaComponent(0.2)
else
imageDim.backgroundColor = UIColor.black.withAlphaComponent(0.0)
【问题讨论】:
【参考方案1】:我认为你的问题出在
override func setHighlighted(_ highlighted: Bool, animated: Bool)
super.setSelected(highlighted, animated: animated)
/* Logic to dim imageview */
if highlighted
imageDim.backgroundColor = UIColor.black.withAlphaComponent(0.2)
else
imageDim.backgroundColor = UIColor.black.withAlphaComponent(0.0)
据我所知,当您选择单元格时,不会调用 UITableViewCell 的setHighlighted
。
相反,将其更改为
override func setSelected(_ selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
/* Logic to dim imageview */
if selected
imageDim.backgroundColor = UIColor.black.withAlphaComponent(0.2)
else
imageDim.backgroundColor = UIColor.black.withAlphaComponent(0.0)
【讨论】:
以上是关于选择时在自定义 UITableViewCell 中调暗 UIImageView的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在自定义 UITableViewCell 中有一个按钮,该按钮引用其中的选择器
Datepicker 不会显示在自定义 UITableViewCell 类中
UIButton 在自定义 UITableviewCell 中没有响应