J'ai un UIView et j'y ai ajouté un geste de tapotement:
let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
tap.delegate = self
myView.addGesture(tap)
J'essaye de l'appeler par programme dans le fichier de test.
sendActionForEvent
J'utilise cette fonction, mais cela ne fonctionne pas:
myView.sendActionForEvent(UIEvents.touchUpDown)
Il montre un sélecteur non reconnu envoyé à l'instance.
Comment puis-je résoudre ce problème?
imageView.userInteractionEnabled = true
si vous utilisez une vue d'image. Je suis tombé dessus pendant trop longtemps.Réponses:
Vous devez initialiser
UITapGestureRecognizer
avec une cible et une action, comme ceci:Ensuite, vous devez implémenter le gestionnaire, qui sera appelé à chaque fois qu'un événement tap se produit:
Alors maintenant, appeler votre gestionnaire d'événement de reconnaissance de geste tap est aussi simple que d'appeler une méthode:
la source
tap.delegate = self
n'est pas nécessaire, puisque vous avez déjà défini un objectif et une actionPour tous ceux qui recherchent la solution Swift 3
la source
isUserInteractionEnabled
est vraiment nécessaire? Le défaut est faux?view.isUserInteractionEnabled = true
est la clé lorsque votre vue est ImageView ou une sous-classe de UIVIew au lieu de UIControl.Pour Swift 4 :
Dans Swift 4, vous devez indiquer explicitement que la fonction déclenchée peut être appelée depuis Objective-C, vous devez donc également ajouter @objc à votre fonction handleTap.
Voir la réponse de @Ali Beadle ici: Swift 4 add gesture: override vs @objc
la source
view.isUserInteractionEnabled = true
est la clé lorsque votre vue est ImageView ou une sous-classe de UIVIew au lieu de UIControl.Juste une note - N'oubliez pas d'activer l'interaction sur la vue:
la source
ÉTAPE 1
ÉTAPE 2
ÉTAPE 3
ÉTAPE 4
PRODUCTION
la source
Implémentation du geste tap
Appelle cette fonction lorsque le robinet est reconnu.
Mise à jour pour For Swift 3
la source
Swift 4
la source
Voici comment cela fonctionne dans Swift 3:
la source
Réponse complète pour Swift 4
Étape 1: créer une sortie pour la vue
Étape 2: définir un geste de toucher
Étape 3: créer la fonction ObjC (appelée lorsque la vue est appuyée)
Étape 4: ajoutez ce qui suit dans viewDidLoad ()
la source
Swift 5.1 Exemple pour trois vues
Étape: 1 -> Ajouter une vue de storyboard et ajouter une vue de sortie
Étape: 2 -> Ajouter un tag de vue storyBoard
Étape: 3 -> Ajouter un geste
Étape: 4 -> sélectionnez la vue
la source
J'ai travaillé sur Xcode 6.4 sur swift. Voir ci-dessous.
la source
Si vous voulez que le code Objective C soit donné ci-dessous,
ou vous voulez que le code swift soit donné ci-dessous,
la source
Vous devez initialiser UITapGestureRecognizer avec une cible et une action, comme ceci:
Ensuite, vous devez implémenter le gestionnaire, qui sera appelé à chaque fois qu'un événement tap se produit:
la source
la source
Swift 4
Tout d'abord, créez un objet de UITapGestureRecognizer
La deuxième étape consiste à initialiser UITapGestureReconizer. Activez l'interaction utilisateur, puis ajoutez-la.
Troisièmement, créez une méthode
la source
essayez l'extension suivante
puis utilisez-le:
vous pouvez même l'utiliser pour la cellule
la source
J'ai travaillé sur Xcode 7.3.1 sur Swift 2.2. Voir ci-dessous.
la source
addTapGesture()
dans votreviewDidLoad()
Je voulais préciser deux points qui me posaient des problèmes.
la source
xCode 9.3, Swift 4.0
la source
Vue intérieureDidLoad
la source
Voici le moyen le plus simple d'ajouter des gestes sur la vue dans Swift 5
la source
Essayez le code Swift suivant (testé dans Xcode 6.3.1):
Notez que votre cible peut être n'importe quelle sous-classe de UIResponder, voir (testé dans Xcode 6.3.1):
la source
Au lieu d'appeler UITapGestureRecognizer de myView, vous pouvez appeler directement la
handleTap
fonction,la source