0

I'm trying to create an UIImageView that when I tap on it, changes it's image, but don't know how to make it clickable.

I have this :

lazy var myImage: UIImageView = {
      let image = UIImageView(frame: .zero)
      image.translatesAutoresizingMaskIntoConstraints = false
      image.heightAnchor.constraint(equalToConstant: 50).isActive = true
      image.widthAnchor.constraint(equalToConstant: 50).isActive = true
      image.contentMode = .scaleAspectFit
      //Here shall I specify the first state? if it's enabled or not? Enabled or not means enabled = Image1, not enabled = Image2
      return image
    }()

I'm using this image from other class, so perhaps here I do not have to specify anything and only from the method of my presenter set the image as I described :

Enabled = Image1

Disabled = Image2

emrcftci
  • 3,355
  • 3
  • 21
  • 35
StuartDTO
  • 783
  • 7
  • 26
  • 72
  • Add UITapGestureRecognizer to the imageView. – PGDev Feb 28 '20 at 08:10
  • This is to detect click? Could you provide an example adding this UITapGestureRecognizer and change the view depending of its state please? – StuartDTO Feb 28 '20 at 08:11
  • Does this answer your question? [How to assign an action for UIImageView object in Swift](https://stackoverflow.com/questions/27880607/how-to-assign-an-action-for-uiimageview-object-in-swift) – Rakesha Shastri Feb 28 '20 at 08:24

2 Answers2

2

First of all, instead of creating the imageView programatically, create it in the storyboard and use an @IBOutlet for it.

@IBOutlet weak var imageView: UIImageView!

Create 2 UIImage properties enabledImage and disabledImage

let enabledImage = UIImage(named: "enabled")
let disabledImage = UIImage(named: "disabled")

In viewDidLoad(),

  1. Set the imageView's initial image as enabledImage (change as per your requirement)
  2. Create a UITapGestureRecognizer and add it to the imageView
  3. Set imageView's isUserInteractionEnabled to true
  4. In imageViewTapped(_:) method, modify imageView.image according to the current image set.

So, compiling all the above points

class VC: UIViewController {
    @IBOutlet weak var imageView: UIImageView!
    let enabledImage = UIImage(named: "enabled")
    let disabledImage = UIImage(named: "disabled")

    override func viewDidLoad() {
        super.viewDidLoad()
        imageView.image = enabledImage
        let gesture = UITapGestureRecognizer(target: self, action: #selector(imageViewTapped(_:)))
        imageView.isUserInteractionEnabled = true
        imageView.addGestureRecognizer(gesture)
    }

    @objc func imageViewTapped(_ recognizer: UIGestureRecognizer) {
        imageView.image = (imageView.image == enabledImage) ? disabledImage : enabledImage
    }
}
PGDev
  • 23,751
  • 6
  • 34
  • 88
0

Here sample how to use UITapGesture recognizer:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        let gestureRecogniser = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
        imageView.isUserInteractionEnabled = true
        imageView.addGestureRecognizer(gestureRecogniser)
    }

    @objc func handleTap(_ sender: UIImageView) {
        debugPrint(sender)
    }
}
Ku6ep
  • 316
  • 2
  • 8