TapGestures 在自定义 TableViewCell 中不起作用
Posted
技术标签:
【中文标题】TapGestures 在自定义 TableViewCell 中不起作用【英文标题】:TapGestures not working inside custom TableViewCell 【发布时间】:2021-08-05 09:46:38 【问题描述】:我将 TapGestureRecognizer 添加到自定义 TableViewCell 的 UIImageView 中,但它没有调用它的操作。 当我点击图像时,它会触发 tableview 的 didSelectRowAt 委托方法。我没有使用任何故事板或 .xib。我已经用通过 .xib 创建的 UI 做了一千次,没有任何问题,但我不明白为什么以编程方式这不起作用。有什么想法吗?
在我的自定义 TableViewCell:
var favButton = UIImageView()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?)
super.init(style: style, reuseIdentifier: reuseIdentifier)
addSubview(favButton)
configureFavButton()
func set(stock: Stock)
self.stock = stock
favButton.image = UIImage(systemName: "heart.fill")?.withTintColor(.black, renderingMode: .alwaysOriginal)
func configureFavButton()
// Creating constraints using SnapKit
favButton.snp.makeConstraints make in
make.trailing.equalToSuperview().inset(10)
make.centerY.equalToSuperview()
make.height.width.equalTo(30)
favButton.isUserInteractionEnabled = true
favButton.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(removeFromFavorites)))
@objc func removeFromFavorites()
guard let stock = stock else return
delegate?.removeFromFavorites(stock)
在我的 ViewController 中,当在 cellForRowAt 定义我的单元格时:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "FavoriteCell") as! FavoriteCell
cell.delegate = self
cell.set(stock: model.favorites[indexPath.row])
return cell
【问题讨论】:
那可能是因为目标不对。 @ElTomato 你能详细解释一下吗?我的意思是,目标应该是“自我”,因为该方法在 UITableViewCell 类中,对吧? 【参考方案1】:您需要将 subView (favButton) 添加到单元格的 contentView 而不是视图本身
contentView.addSubview(favButton)
【讨论】:
这正是问题所在。你救了我的一天!以上是关于TapGestures 在自定义 TableViewCell 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章