web-dev-qa-db-fra.com

ASAuthorizationAppleIDButton ne répond pas aux événements touchUpInside

J'ai rencontré un bug étrange dans Latest Xcode 11.0 Mon code:

let button = ASAuthorizationAppleIDButton(type: .default, style: .black)
button.translatesAutoresizingMaskIntoConstraints = false
button.cornerRadius = 10
button.addTarget(self, action: #selector(appleSignInButtonSelected(_:)), for: .touchUpInside)

Le sélecteur n'a jamais appelé, mais si je change d'événement en touchDown, tout fonctionne.

10
tereks

J'ai rencontré le même problème. Dans mon cas, j'ai eu UITapGestureRecognizer attaché à la vue principale du contrôleur de vue. La définition de la propriété cancelsTouchesInView du module de reconnaissance de gestes sur false a aidé.

7
Slavo

Je pense que c'est Apple bug. Utilisez touchDown au lieu de touchUpInside.

6
erdikanik

J'ai constaté que le ASAuthorizationAppleIDButton ne recevait aucun geste de prise (down ou upInside) s'il y avait un problème de mise en page avec son parent.

Dans mon cas, j'avais omis une contrainte dans l'une des vues parent, ce qui faisait que ASAuthorizationAppleIDButton se trouvait en dehors du cadre de la vue parent.

C'était dans un storyboard, donc il y avait une flèche rouge et un avertissement à ce sujet, mais je l'avais manqué au départ. J'ai trouvé cela en déboguant la hiérarchie des vues et en notant la position de chacune des vues d'ancêtre dans l'arborescence.

Le correctif consiste à s'assurer qu'il existe des contraintes pour garder le ASAuthorizationAppleIDButton dans le cadre de ses ancêtres.

0
Robin Daugherty