skip to Main Content

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.

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"
    
    Login or Signup to reply.
  2. 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
        }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search