Reputation: 25
I understand that the selector method cannot include arguments, but now I'm at a loss as to how I should go about what I want to do.
My objective is to have 5 UI Image Views, each with an image of a star. When the image is tapped, the star should swap images to grey or blue.
My question is, how do I write only one method that handles changing the star image, depending on which star is tapped? Ideally, I would like to send the image as an argument to the method, though I know that is not possible. The only way I can see around this is to write a method for each of the five stars, but as the code would be identical, I feel like there must be a better way.
On View Did Load:
// add tap recognition to rating stars
let tapGestureRecognizerOne = UITapGestureRecognizer(target:self, action:#selector(self.changeStar))
starOneEditImage.userInteractionEnabled = true
starOneEditImage.addGestureRecognizer(tapGestureRecognizerOne)
let tapGestureRecognizerTwo = UITapGestureRecognizer(target:self, action:#selector(self.changeStar))
starTwoEditImage.userInteractionEnabled = true
starTwoEditImage.addGestureRecognizer(tapGestureRecognizerTwo)
let tapGestureRecognizerThree = UITapGestureRecognizer(target:self, action:#selector(self.changeStar))
starThreeEditImage.userInteractionEnabled = true
starThreeEditImage.addGestureRecognizer(tapGestureRecognizerThree)
let tapGestureRecognizerFour = UITapGestureRecognizer(target:self, action:#selector(self.changeStar))
starFourEditImage.userInteractionEnabled = true
starFourEditImage.addGestureRecognizer(tapGestureRecognizerFour)
let tapGestureRecognizerFive = UITapGestureRecognizer(target:self, action:#selector(self.changeStar))
starFiveEditImage.userInteractionEnabled = true
starFiveEditImage.addGestureRecognizer(tapGestureRecognizerFive)
And then a method to call on tap of the image:
func changeStar() {
print ("star tapped")
}
Upvotes: 0
Views: 59
Reputation: 535557
I understand that the selector method cannot include arguments
You understand wrong. The parameter to changeStar
is the gesture recognizer. And gesture recognizer has a view
, and that's the image view you want!
func changeStar(g:UIGestureRecognizer) {
let v = g.view as! UIImageView
// ...
}
Upvotes: 1