Lorsque j'appuie sur UIView mais que Gesture ne fonctionne pas.
override func viewDidLoad() { super.viewDidLoad() let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:))) viewForSHadow.isUserInteractionEnabled = true viewForSHadow.addGestureRecognizer(tap) // Do any additional setup after loading the view. } func handleTap(_sender: UITapGestureRecognizer) { print("---------View Tapped--------") viewForSHadow.isHidden = true viewForAlert.isHidden = true }
Je veux simplement effectuer cette action sur UIView, appuyez sur.
6 Réponses :
Vous devez implémenter comme suit:
class ViewController: UIViewController, UIGestureRecognizerDelegate { ... override func viewDidLoad() { super.viewDidLoad() let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(_sender:))) viewForSHadow.isUserInteractionEnabled = true viewForSHadow.addGestureRecognizer(tap) } @objc func handleTap(_sender: UITapGestureRecognizer) { print("---------View Tapped--------") viewForSHadow.isHidden = true viewForAlert.isHidden = true } ... }
à quoi sert le délégué
ici et voyez-vous le code une fois que vous avez appuyé sur le geste, masquez le viewForSHadow.isHidden = true
le délégué n'est pas du tout nécessaire ici!
Oui, le délégué n'est pas requis. @ Anbu.Karthik Je viens d'utiliser le code de Coding pour faire fonctionner le geste du robinet.
@BhavikModi - mais si l'utilisateur cliquait sur la vue, il masquait la propre vue
@ Anbu.Karthik Nous ne savons pas ce que veut exactement Coding :) Vous pouvez lui demander directement.
Qu'est-ce que vous avez essayé et qu'est-ce qui ne fonctionne pas? J'ai déjà testé cela et fonctionne bien.
Votre code est plus que suffisant pour que UIGestureRecognizer fonctionne, vous devriez vérifier d'autres choses comme, y a-t-il quelque chose d'autre qui peut consommer l'interaction de l'utilisateur. Et aussi pour vérifier si vous utilisez
isUserInteractionEnabled = false
à une vue parente de viewForSHadow.
Vous devez mentionner la propriété numberOfTapsRequired
de UITapGestureRecognizer
.
override func viewDidLoad() { super.viewDidLoad() let tap = UITapGestureRecognizer(target: self, action: #selector(handleTapGesture(_sender:))) tap.numberOfTapsRequired = 1 viewForSHadow.isUserInteractionEnabled = true viewForSHadow.addGestureRecognizer(tap) } @objc func handleTapGesture(_sender: UITapGestureRecognizer) { print("---------View Tapped--------") // Why are you hiding this view **viewForSHadow** viewForSHadow.isHidden = true viewForAlert.isHidden = true }
De plus, assurez-vous que vous ne faites pas viewForSHadow .isUserInteractionEnabled = false
n'importe où dans le code.
désolé, pas d'accord avec vous, numberOfTapRequired a la valeur par défaut 1, c'est la raison pour laquelle cela ne peut pas être le problème. developer.apple.com/documentation/uikit/uitapgesturerecogniz er /… a >
Pouvez-vous vérifier si vous ne faites pas viewForSHadow.isUserInteractionEnabled = false
n'importe où?
Vous pouvez vérifier dans la hiérarchie des vues de débogage si quelque chose avec alpha = 0 chevauche votre viewForSHadow .
Tout d'abord, votre code ne compile pas. La signature handleTap (_ :)
doit être comme:
class ViewController: UIViewController { @IBOutlet weak var viewForSHadow: UIView! override func viewDidLoad() { super.viewDidLoad() let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:))) viewForSHadow.addGestureRecognizer(tap) } @objc func handleTap(_ sender: UITapGestureRecognizer) { print("---------View Tapped--------") } }
Deuxièmement, vous devez d'abord essayer avec le code minimal dans un projet séparé. Et par code minimal, je veux dire ce que vous avez ajouté dans la question.
@objc func handleTap(_ sender: UITapGestureRecognizer) { print("---------View Tapped--------") }
Essayez avec juste le code ci-dessus et voyez si vous pouvez le faire fonctionner. Le code ci-dessus fonctionne bien de mon côté sans aucun délégué
ou numberOfTaps
.
Vous devez utiliser UIGestureRecognizerDelegate
let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleDismiss)) tapRecognizer.delegate = self blackView.addGestureRecognizer(tapRecognizer) func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { return true } @objc func handleDismiss() { print("handleDismiss") }
N'oubliez pas de définir UIGestureRecognizerDelegate dans votre classe
combien de fois tu as appuyé sur le geste
avez-vous une ImageView au-dessus de la vue ou quelque chose qui peut consommer le geste?
Où avez-vous ajouté viewForSHadow et quelles sont les contraintes que vous avez ajoutées?
Il est dans la vue principale et le montre - le cache.
une fois que vous aurez tapé, votre vue masquera ce qui semble dans votre code. donc votre robinet ne fonctionne que pour la première fois
@Coding a essayé une fois de mettre du code dans viewWillAppear () et de vérifier, s'il ne fonctionne pas, partager les détails de viewForSHadow comment vous l'avez initialisé.