J'ai fabriqué beaucoup de boutons et je ne comprends pas pourquoi celui-ci ne fonctionnera pas.
Ma hiérarchie est configurée comme ceci:
View -> Scroll View -> Subview -> Button
Il y a beaucoup d'autres éléments dans cette sous-vue et chacun d'eux fonctionne lorsqu'il est touché. Dans le générateur d'interface, je peux voir que l'événement "Touch Up Inside" est lié à ma méthode.
"- (IBAction)favoritesButtonDepressed:(id)sender"
.
Cependant, lorsque je clique sur le bouton, cette méthode ne s'exécute jamais et mon point d'arrêt n'est par la suite jamais touché.
J'ai remarqué que même lorsque j'appuyais sur le bouton, le libellé ne changeait pas de couleur (même si l'affichage est en surbrillance est activé), mais mon autre bouton de la vue le fait.
L'interaction utilisateur est activée sur le bouton ainsi que sur tout ce qui se trouve dans la hiérarchie.
Afin que mes éléments dans la sous-vue puissent recevoir des événements tactiles, j'ai fait en sorte que la vue défilement ressemble à la 4ème réponse de cet article .
Aha, je l'ai. Il s'avère que la sous-vue contenant le bouton (ainsi que les autres contrôles) avait une hauteur de 740 et que le bouton avait un Y de 781. Déplacer le bouton vers le haut corrigeait le problème. Puisque tout s’affichait correctement, je n’ai pas pensé à vérifier la hauteur de la sous-vue.
Je pense que vous avez placé votre bouton sur UIImageView. Si tel est le cas, vous devez permettre à UserInteraction de l'activer pour ce UIImageView. Vérifiez s'il vous plaît.
Si une UITapGestureRecognizer
est implémentée sur l’un des super View de votre bouton. alors UIButtonEventTouchUpInside
ne sera pas renvoyé.
vous devriez implémenter UITapGestureRecognizer comme ceci
tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)];
[tapGesture setCancelsTouchesInView:NO]; // This should do what you want
[tapGesture setDelegate:self];
Assurez-vous que votre bouton est placé dans les limites de superView ,
Si un bouton est placé en dehors des limites de superView, le bouton ne peut pas être cliqué,
à cause de l'implémentation de la fonction hitTest
Avoir une mise en page ressemble à:
Vue -> Sous-vue (UIView) -> Bouton
Pour résoudre ce problème, cochez la case "Interaction utilisateur activée" dans les attributs de Subview (UIView).
Une autre chose à considérer est de savoir si vous avez placé une autre vue dessus.
Par exemple, si vous chargez une autre vue à partir d'une pointe et que vous l'encadrez de manière incorrecte, il est fort possible qu'elle apparaisse au-dessus du bouton, interceptant ainsi toute pression.
Vous pouvez vérifier qu'il s'agit bien de XCode 6 avec le contrôle "Debug View Heirachy".
J'ai eu quelque chose de similaire récemment;
Essayez de supprimer la déclaration (IBAction)favoritesButtonDepressed:(id)sender
(et la méthode) dans votre contrôleur et de la "faire glisser" à nouveau depuis Interface Builder.
Veuillez vous reporter aux discussions suivantes qui pourraient vous aider L'événement UIButton 'Retouchez l'intérieur' ne fonctionne pas. "Touch Down" fonctionne bien
UIButton retouche événement interne ne fonctionne pas dans ios5 alors que c'est ok dans ios6
L'événement UIButton 'Touch Up Inside' ne fonctionne pas. "Touch Down" fonctionne bien
Dans mon cas, IBAction pour le bouton ne fonctionnait pas, j'ai essayé de nombreuses façons. J'ai donc créé un IBOutlet pour le bouton et ajouté une action de clic en utilisant la méthode "addTarget".
[myButton addTarget:self action:@selector(dismissClickFunction:) forControlEvents:UIControlEventAllEvents];
J'ai eu le même problème.
J'ai eu un bouton dans un xib que j'ai placé à l'intérieur d'une vue.
J'ai laissé l'instance de xib à sa petite taille par défaut définie lors de l'importation, car je la redimensionne automatiquement dans le code pour gérer la rotation des périphériques.
Cela a empêché le bouton de réagir au toucher, même s'il était clairement au milieu de l'écran.
Je l'ai corrigé en changeant simplement la disposition de l'instance xib pour remplir la vue parente.
Dépannage: