点击手势在自定义 UITableViewCell 中不起作用
TapGestures not working inside custom TableViewCell
我在自定义 TableViewCell 中将 TapGestureRecognizer 添加到 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
}
您需要将子视图 (favButton) 添加到单元格的 contentView 而不是视图本身
contentView.addSubview(favButton)
我在自定义 TableViewCell 中将 TapGestureRecognizer 添加到 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
}
您需要将子视图 (favButton) 添加到单元格的 contentView 而不是视图本身
contentView.addSubview(favButton)