Ich habe benutzerdefinierte TableViewCells in meiner TableView. Sie haben 2 oder mehr ImageViews innerhalb der Zelle, die berührt werden können und dann springen und ausgewählt werden. Aber woher weiß ich, welche ImageView in welcher Zeile ausgewählt wurde, da die Zellen wiederverwendet werden? Ich weiß, dass ich den indexPath.row bekommen kann, aber woher weiß ich, welches der 2 oder 3 Bilder die Funktion ausgelöst hat, um mir den indexPath zu geben? Ich hoffe, ihr versteht was ich meine. Hier ist meine benutzerdefinierte TableViewCell, der TableView-Code ist nur ein bisschen Standard.Wie kann man wissen, welches Bild in welcher Tabellenansichtszelle berührt wurde?
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
}
}
Sie bereits tippen Gesten auf jedem Bild Ansicht haben, können Sie jetzt wissen, welches Bild berührt wird. Was ist das Problem? –
wahr, aber die Tippgeste befindet sich innerhalb der Klasse TableViewCell. Wie bekomme ich den indexPath von dort? Ich weiß nur, dass ich den IndexPath von der UITableView innerhalb der UITableView Klasse erhalten kann, aber dann müsste ich eine andere Gestenerkenner auf die Bilder setzen, die falsch zu sein scheint ?! –
Sie benötigen einen Delegaten, um ein Ereignis im View-Controller auszulösen, bei dem die Zelle berührt wurde. ViewController hat einen Verweis auf die Tabellenansicht und kann Ihnen den indexPath geben, indem Sie die Funktion tableview.indexPathForCell aufrufen –