web-dev-qa-db-fra.com

Comment rendre un UIImageView sur le storyboard cliquable (Swift)

Je suis nouveau sur Swift (et développement de Xcode en général) et je me demandais comment rendre une ImageView sur le storyboard cliquable. Ce que j'essaie de faire, c'est de le faire quand on clique dessus, il montre un autre contrôleur de vue.

29
pjtnt11

Vous pouvez ajouter tapGesture pour cela. Voici le code:

class ViewController: UIViewController {

@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
    super.viewDidLoad()
    // create tap gesture recognizer
    let tapGesture = UITapGestureRecognizer(target: self, action: "imageTapped:")

    // add it to the image view;
    imageView.addGestureRecognizer(tapGesture)
    // make sure imageView can be interacted with by user
    imageView.userInteractionEnabled = true
}

func imageTapped(gesture: UIGestureRecognizer) {
    // if the tapped view is a UIImageView then set it to imageview
    if let imageView = gesture.view as? UIImageView {
        println("Image Tapped")
        //Here you can initiate your new ViewController

        }
    }
}

Swift 3.

class ViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // create tap gesture recognizer
        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.imageTapped(gesture:)))

        // add it to the image view;
        imageView.addGestureRecognizer(tapGesture)
        // make sure imageView can be interacted with by user
        imageView.isUserInteractionEnabled = true
    }

    func imageTapped(gesture: UIGestureRecognizer) {
        // if the tapped view is a UIImageView then set it to imageview
        if (gesture.view as? UIImageView) != nil {
            print("Image Tapped")
            //Here you can initiate your new ViewController

        }
    }
}

Swift 5.

class ViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // create tap gesture recognizer
        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.imageTapped(gesture:)))

        // add it to the image view;
        imageView.addGestureRecognizer(tapGesture)
        // make sure imageView can be interacted with by user
        imageView.isUserInteractionEnabled = true
    }

    @objc func imageTapped(gesture: UIGestureRecognizer) {
        // if the tapped view is a UIImageView then set it to imageview
        if (gesture.view as? UIImageView) != nil {
            print("Image Tapped")
            //Here you can initiate your new ViewController

        }
    }
}
61
Dharmesh

Vous pouvez le faire encore plus facilement et rendre une image cliquable via Storyboard sans aucun codage .

  • Vous devez d'abord faire glisser un UITapGestureRecognizer sur votre UIImageView dans Storyboard.
  • Ensuite, vous créez l'IBAction que vous souhaitez exécuter dans votre code avec @IBAction func imageClicked(_ sender: Any) {}
  • Ensuite, vous devez connecter le UITapGestureRecognizer au IBAction de votre classe en sélectionnant le reconnaisseur de gestes dans le Document Outline, puis basculer vers Connection Inspector Tab et en faisant glisser le Sent Actions -> Selector dans votre UIViewController où vous sélectionnez ensuite l'action appropriée que vous avez créée précédemment.
  • Enfin, vous devez cocher la case User Interaction Enabled sur la vue de l'image.

Terminé, un UIImageView entièrement cliquable sans écrire une seule ligne de code, sauf la fonction évidente que vous souhaitez invoquer. Mais bon, si vous voulez par exemple pousser un enchaînement à la place, alors vous pouvez vous passer de tout codage en utilisant les identificateurs de gestes Triggered Segues au lieu de son Sent Actions.

Bien que le Storyboard ait ses limites, il n'est pas nécessaire d'écrire du code pour les images cliquables. ;)

enter image description here

23
xxtesaxx

Je suggérerais plutôt de créer un bouton UIB sans texte et d'en faire l'image que vous souhaitez. Après cela, vous pouvez faire glisser CTRL de l'image vers le contrôleur de vue auquel vous souhaitez vous connecter. Ou vous pouvez simplement créer une IBAction dans le code de votre contrôleur de vue qui enchaîne manuellement.

5
Zolnoor

pour Swift version 3.0 essayez le code ci-dessous

override func viewDidLoad() {
super.viewDidLoad()

let tap1 = UITapGestureRecognizer(target: self, action: #selector(tapGesture1))
imageview.addGestureRecognizer(tap1)
imageview.isUserInteractionEnabled = true
}
func tapGesture1() {
    print("Image Tapped")
}
4
Rajesh.k

Sur le scénarimage, l'interaction utilisateur de l'affichage d'image est activée, puis obtenez cette méthode

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *touch = [touches anyObject];

    if ([touch view] == yourImageView)
    {
            //add your code for image touch here 
    }
}
2
LC 웃

J'ai atteint cet objectif en définissant l'interaction utilisateur enable = true

et ce code ci-dessous dans TouchesBegan ... Propre et simple pour cela

ImageView était également à l'intérieur d'un StackView

if let touch = touches.first {
   if touch.view == profilePicture {
      print("image touched")
   }
}
1
IOSDev

Eh bien, bien que vous puissiez utiliser un UITapGestureRecognizer comme mentionné ci-dessus, si vous avez besoin de faire un projet rapide et de vous soucier des fonctionnalités de l'application, le moyen le plus simple est d'avoir un bouton transparent couvrant votre UIImageView sans texte, puis de l'utiliser pour écrire le code que vous voulez. Bien sûr, cela ne sera pas recommandé si vous faites un projet très important ou quelque chose mais si vous voulez juste faire une application rapide (disons un MVP très simple pour une réunion), cette méthode devrait fonctionner correctement.

0
Kyro