Comment assigner une action pour l'object UIImageView dans Swift

UIImageView d'assigner un UIImageView à une action quand l'user tape dessus.

Je sais comment créer une action pour un UIButton , mais comment puis-je imiter le même comportement d'un UIButton , mais en utilisant un UIImageView ?

Vous aurez besoin d'un UITapGestureRecognizer . Pour configurer utilisez ceci:

 override func viewDidLoad() { super.viewDidLoad() let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:))) imageView.isUserInteractionEnabled = true imageView.addGestureRecognizer(tapGestureRecognizer) } func imageTapped(tapGestureRecognizer: UITapGestureRecognizer) { let tappedImage = tapGestureRecognizer.view as! UIImageView // Your action } 

(Vous pouvez aussi utiliser un UIButton et lui assigner une image, sans text et simplement connecter une IBAction)

Vous devez append un outil de reconnaissance de gestes (pour utiliser l'utilisation de UITapGestureRecognizer , appuyez et maintenez la touche UILongPressGestureRecognizer ) sur votre UIImageView .

 let tap = UITapGestureRecognizer(target: self, action: #selector(YourClass.tappedMe)) imageView.addGestureRecognizer(tap) imageView.isUserInteractionEnabled = true 

Et implémentez la méthode de sélection comme:

 func tappedMe() { println("Tapped on Image") } 

Vous pouvez append un UITapGestureRecognizer à l'imageView, en faire glisser un dans votre Storyboard / xib, Ctrl-glisser de l'imageView à l'outil gestureRecognizer, et Ctrl-glisser depuis le gestureRecognizer vers le file Swift pour faire un IBAction .

Vous devrez également activer les interactions user sur UIImageView , comme indiqué dans cette image: entrez la description de l'image ici

Pour Swift 2.0 et supérieur, faites ceci

 @IBOutlet weak var imageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let tap = UITapGestureRecognizer(target: self, action: #selector(ViewController.tappedMe)) imageView.addGestureRecognizer(tap) imageView.userInteractionEnabled = true } func tappedMe() { print("Tapped on Image") } 

Vous pouvez simplement définir l'image de l' UIButton à ce que vous auriez normalement mis dans un UIImageView . Par exemple, où vous feriez:

 myImageView.image = myUIImage 

Vous pourriez plutôt utiliser:

 myButton.setImage(myUIImage, forState: UIControlState.Normal) 

Alors, voici à quoi pourrait ressembler votre code:

 override func viewDidLoad(){ super.viewDidLoad() var myUIImage: UIImage //set the UIImage here myButton.setImage(myUIImage, forState: UIControlState.Normal) } @IBOutlet var myButton: UIButton! @IBAction func buttonTap(sender: UIButton!){ //handle the image tap } 

L'avantage de l'utilisation de cette méthode est que si vous devez charger l'image à partir d'une database, vous pouvez définir le titre du button avant de définir l'image:

 myButton.setTitle("Loading Image...", forState: UIControlState.Normal) 

Pour indiquer à vos users que vous chargez l'image

Vous pouvez placer un UIButton avec un arrière-plan transparent au-dessus du UIImageView , et écouter un tap sur le button avant de charger l'image