Comment faire pour rendre UIImageView sur le storyboard cliquable (swift)

je suis nouveau pour swift (et le développement de Xcode en général) et je me demandais comment faire une vue D'image sur le storyboard cliquable. Ce que j'essaie de faire c'est de faire en sorte que lorsque son cliqué, il affiche un autre contrôleur de vue.

21
demandé sur Steve Obbayi 2015-03-23 06:33:42

6 réponses

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.0

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

        }
    }
}
46
répondu Dharmesh Kheni 2017-02-05 11:16:26

Vous pouvez le faire encore plus facile et de faire une image cliquable via Storyboard sans le codage à tous les .

  • vous devez d'abord glisser un UITapGestureRecognizer sur votre UIImageView dans le Storyboard.
  • ensuite vous créez L'IBAction que vous voulez exécuter dans votre code avec @IBAction func imageClicked(_ sender: Any) {}
  • ensuite, vous devez connecter le UITapGestureRecognizer à la IBAction dans votre classe par sélectionner le reconnaisseur de geste dans le Document Outline , puis passer au Connection Inspector Tab et glisser le Sent Actions - > Selector à votre UIViewController où vous sélectionnez ensuite l'action appropriée que vous avez créé précédemment.
  • enfin, vous devez mettre la case User Interaction Enabled sur la vue d'image.

fait, un UIImageView entièrement cliquable sans écrire une seule ligne de code sauf la fonction évidente que vous voulez invoquer. Mais hey, si vous voulez par exemple pousser un segue à la place, alors vous pouvez aller sans codage du tout en utilisant les reconnaisseurs de geste Triggered Segues au lieu de son Sent Actions .

bien que Storyboard ont leurs limites, il n'y a pas besoin d'écrire de code pour les images cliquables. ;)

enter image description here

17
répondu xxtesaxx 2017-05-18 16:47:18

je suggérerais de créer un UIButton sans texte et d'en faire l'image que vous voulez, à la place. Après avoir fait cela, vous pouvez Ctrl-glisser de l'image vers le contrôleur de vue que vous voulez suivre. Ou vous pouvez simplement faire une IBAction dans le code de votre contrôleur de vue qui se produit manuellement.

4
répondu Zolnoor 2015-03-23 03:41:51

pour la version 3.0 de swift essayez le code

override func viewDidLoad() {
super.viewDidLoad()

let tap1 = UITapGestureRecognizer(target: self, action: #selector(tapGesture1))
imageview.addGestureRecognizer(tap1)
imageview.isUserInteractionEnabled = true
}
func tapGesture1() {
    print("Image Tapped")
}
3
répondu Rajesh.k 2017-01-19 07:11:25

sur le storyboard set image view interaction de l'utilisateur activée et puis obtenir avec 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
répondu LC 웃 2015-03-23 04:02:21

j'ai atteint cet objectif en réglant l'interaction utilisateur enable = true

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

ImageView a également été à l'intérieur d'un Empilervoir

if let touch = touches.first {
   if touch.view == profilePicture {
      print("image touched")
   }
}
1
répondu Chris Linder 2018-04-09 04:30:39