I am showing multiple images in form of a grid in my content extension. how can I add an different action for every image. I know we can add action for button. Is it possible to add action for image too.
Asked
Active
Viewed 181 times
0
-
You can add a tap gesture to your images and wire them up with @objc func... – Joshua Sep 16 '22 at 03:49
-
Thanks @konekoya Any way to send info to app from extension. I need to check which image was tapped. – vk100 Sep 16 '22 at 05:47
2 Answers
1
You can add a UITapGestureRecognizer
to your image view and differentiate your images using tags
like this:
Objective-C Version:
// declare tap gesture
UITapGestureRecognizer *imageTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageTapped:)];
// specify number of taps required
[imageTap setNumberOfTapsRequired:1];
// enable user interaction and add the tap gesture + tag for image 1
[imageview1 setUserInteractionEnabled:YES]
[imageview1 addGestureRecognizer:imageTap];
imageview1.tag = 1;
// enable user interaction and add the tap gesture + tag for image 2
[imageview2 setUserInteractionEnabled:YES]
[imageview2 addGestureRecognizer:imageTap];
imageview.tag = 2;
-(void)imageTapped:(UITapGestureRecognizer*)sender {
if(sender.view.tag == 1) {
// do something with image 1 here
} else if (sender.view.tag == 2) {
// do something with image 2 here
}
}
Swift Version:
// declare tap gesture
let imageTap = UITapGestureRecognizer(target: self, action: #selector(imageTapped))
// specify number of taps required
imageTap.numberOfTapsRequired = 1
// enable user interaction and add the tap gesture + tag for image 1
imageView1.isUserInteractionEnabled = true
imageView1.addGestureRecognizer(imageTap)
imageView1.tag = 1
// enable user interaction and add the tap gesture + tag for image 2
imageView2.isUserInteractionEnabled = true
imageView2.addGestureRecognizer(imageTap)
imageView2.tag = 2
@objc func imageTapped(sender: UITapGestureRecognizer) {
if(sender.view!.tag == 1) {
// do something with image 1 here
} else if (sender.view!.tag == 2) {
// do something with image 2 here
}
}
If you're trying to connect Obj-C to Swift. Add your tags
in Obj-C and import your projects generated Swift header file in your Objective-C header file:
#import "ProjectName-Swift.h"

griv
- 2,098
- 2
- 12
- 15
1
For Swift 5 and for one image you can use easily this method.
override func viewDidAppear(_ animated: Bool) {
let gesture = UITapGestureRecognizer(target: self, action: #selector(touchImage))
self.imageView.isUserInteractionEnabled = true
self.imageView.addGestureRecognizer(gesture)
}
Then you need to put objc func in your class like below
@objc func touchImage() {
// write your code here when touch images
}

yasin89
- 103
- 8