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.
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
}
}
}
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 votreUIImageView
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
à laIBAction
dans votre classe par sélectionner le reconnaisseur de geste dans leDocument Outline
, puis passer auConnection Inspector Tab
et glisser leSent Actions
- >Selector
à votreUIViewController
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. ;)
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.
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")
}
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
}
}
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")
}
}