Comment puis-je transférer des contacts vers un UIButton à partir d'un autre UIView?


4

J'ai un UIButton et un UIView. La vue se trouve au-dessus du bouton et est plus grande que la taille du bouton. La vue elle-même est ce que je veux avoir accepter les événements tactiles, et je voudrais les transmettre au bouton, de sorte que tous les changements visuels de bouton normal au toucher se produisent.

Je n'arrive pas à faire ce travail - mon UIView implémente touchesBegan/Moved/Ended/Canceled, et se retourne et appelle les mêmes méthodes sur le bouton avec les mêmes arguments. Mais le bouton ne répond pas.

Je me suis assuré que les méthodes tactiles sont effectivement appelées sur le UIView.

Y at-il quelque chose d'évident qui me manque ici, ou une meilleure façon de faire passer les messages de contrôle? Ou y a-t-il une bonne raison pour que cela ne fonctionne pas?

Merci!

[Remarque: Je ne cherche pas de solutions de contournement pour la vue + conception de bouton. Supposons que c'est une exigence. Je m'intéresse à la notion de contrôles qui sont des proxies tactiles pour d'autres contrôles. Merci.]

8

Créez un ContainerView qui contient un bouton et remplacez hitTest:withEvent: pour qu'il renvoie l'instance UIButton.

  0

Brillant, merci. 19 août. 102010-08-19 22:56:40

  0

Cette réponse est incroyable et c'est la passerelle pour résoudre de nombreux problèmes avec UIKit. En surchargeant hitTest vous pouvez obtenir n'importe quoi pour réagir à n'importe quel événement. Tout à fait incroyable. Merci +1! 08 nov.. 122012-11-08 22:45:06


0

Etes-vous sûr que vos méthodes sont appelées? Si vous n'avez pas défini userInteractionEnabled = YES, cela ne fonctionnera pas.

J'ai cependant utilisé ce type de transfert avant sans problème, donc je ne sais pas pourquoi vous voyez les problèmes que vous voyez.

  0

Oui, les méthodes sont appelées comme prévu. Avez-vous transmis d'autres messages en plus des touches *? La cible de l'envoi d'un UIButton était-elle? Ou autre chose? Merci. 19 août. 102010-08-19 19:41:58

  0

Ce n'était pas un UIButton; c'était pour la reconnaissance "long touch" je pense. Mais je l'ai écrit au moins deux fois, donc j'oublie peut-être quelque chose. 20 août. 102010-08-20 16:28:43