【发布时间】:2017-02-14 00:14:08
【问题描述】:
我的 tableView 中有自定义 tableViewCells。它们在单元格内有 2 个或多个 ImageView,可以触摸它们,然后它们会反弹并被选中。但是由于单元格被重复使用,我怎么知道哪一行中的哪个 ImageView 被选中了呢?我知道我可以得到 indexPath.row,但我怎么知道 2 或 3 个图像中的哪一个触发了给我 indexPath 的函数?希望你们明白我的意思。这是我的自定义 tableViewCell,tableView 代码只是有点标准。
import UIKit
class TwoPicsTableViewCell: UITableViewCell {
@IBOutlet var containerView: UIView!
@IBOutlet var votesButton: UIButton!
@IBOutlet var commentsButton: UIButton!
@IBOutlet var firstImage: bouncingRoundImageView!
@IBOutlet var secondImage: bouncingRoundImageView!
@IBOutlet var titleLabel: UILabel!
@IBOutlet var descriptionLabel: UILabel!
@IBOutlet var topUsernameLabel: UILabel!
@IBOutlet var bottomUsernameLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
//self.layoutIfNeeded()
containerView.layer.cornerRadius = 10
containerView.clipsToBounds = true
self.backgroundColor = ColorScheme.primaryColor
votesButton.setTitleColor(ColorScheme.fourthColor, for: UIControlState())
commentsButton.setTitleColor(ColorScheme.fourthColor, for: UIControlState())
setupBackgroundGradient()
setupFirstImage()
setupSecondImage()
}
func setupBackgroundGradient() {
let bottomColor = ColorScheme.secondaryColor.cgColor
let topColor = ColorScheme.thirdColor.cgColor
let layer = CAGradientLayer()
layer.frame = containerView.frame
layer.frame.offsetBy(dx: -10,dy:-10)
layer.frame.size.width += 10
layer.frame.size.height += 10
layer.colors = [topColor, bottomColor]
containerView.layer.insertSublayer(layer, at: 0)
}
func setupFirstImage() {
let tappedOne = UITapGestureRecognizer(target: self, action: #selector(checkPicTwo))
firstImage.addGestureRecognizer(tappedOne)
}
func setupSecondImage() {
let tappedTwo = UITapGestureRecognizer(target: self, action: #selector(checkPicOne))
secondImage.addGestureRecognizer(tappedTwo)
}
func checkPicTwo() {
firstImage.bouncing()
vote(voteForPic: firstImage)
if secondImage.layer.borderWidth != 0 {
secondImage.layer.borderWidth = 0
}
}
func checkPicOne() {
secondImage.bouncing()
if firstImage.layer.borderWidth != 0 {
firstImage.layer.borderWidth = 0
}
}
override func prepareForReuse() {
super.prepareForReuse()
firstImage.image = nil
secondImage.image = nil
firstImage.layer.borderWidth = 0
secondImage.layer.borderWidth = 0
}
}
【问题讨论】:
-
你已经在每个图像视图上都有点击手势,所以现在你知道哪个图像被触摸了。有什么问题?
-
true,但点击手势在 tableViewCell 类中。那么如何从那里获取 indexPath 呢?我只知道我可以从 UITableView 类中的 UITableView 获取 indexPath,但是我需要在图像上放置另一个手势识别器,这似乎是错误的?!
-
你需要一个委托来在视图控制器中触发一个单元格被触摸的事件。 ViewController 引用了表格视图,可以通过调用 tableview.indexPathForCell 函数为您提供 indexPath
-
你能告诉我怎么做吗?我真的不明白你的意思。
-
这个答案可能对stackoverflow.com/questions/28659845/…有帮助
标签: ios swift uitableview uitapgesturerecognizer