35 votes

UIGestureRecognizer reçoit le toucher mais le transmet également à UIControl

Comment voulez-vous permettre à un UIGestureRecognizer d'un UIView de recevoir un événement tactile, mais aussi s'assurer que l'autre, sous-jacente/superposant UIView reçoit également le même événement tactile?

Disons que j'ai l'affichage suivant-hierachie: view hierachie scribble

Vues Une (bleu) et B (rouge) sont à la fois des sous-vues de la même superview (gris). En d'autres termes, ils sont à la fois des frères et sœurs et l'ordre décide qui couvre l'autre.

Option 1: Vue B (rouge) a UIButton comme son sous-vue. Option 2: Vue d'Une (bleu) a UIButton comme son sous-vue.

Compte tenu de l'Option 1 pour l'amour des explications: Vue d'Une (bleu) a un UITapGestureRecognizer (ou peut-être même plus, d'autres UIGestureRecognizers) ci-joint. Quelle serait la meilleure approche élégante pour vous assurer que l' UIButton ne reçoivent tous les doigts sur sa région, mais aussi à la vue d'Une (bleu) reçoit des petites touches sur sa UITapGestureRecognizer?

Si possible par tous les moyens, la solution ne devrait pas impliquer l'extension de l' UIButton-classe et manuellement la redirection de tous les événements à partir du bouton lui-même. Imaginez la vue B, contiennent beaucoup plus de contrôles et pas seulement sur un bouton. L'ensemble de ces contrôles devraient, en quelque sorte permettre de voir Un de recevoir de la touche sur sa UIGestureRecognizer.

Je n'offrent deux options que je n'ai pas de soins qui, de ce point de vue (A ou B) qui vient en premier, tant que les deux reçoivent la touche.

Toutes mes démarches jusqu'à présent brusquement atteint culs-de-sac. Peut-être une coutume répondeur de la chaîne peut être une bonne solution? Je continue à penser qu'il doit y avoir une solution élégante à l'intérieur de l'ensemble de l' UIKit/UIEvent/UIResponder de la pile.

19voto

sergio Points 52422

Avez-vous essayé avec ça ?

cancelsTouchesInView Valeur booléenne affectant si des touches sont apportées à une vue lorsqu'un geste est reconnu.

 @property(nonatomic) BOOL cancelsTouchesInView
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X