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:
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