2010-03-19 8 views
7

Titre plus ou moins dit tout. En réponse à un événement touchesBegan, mon UIViewController se recolorise et ajoute des sous-vues. Il ne reçoit jamais le touchesEnded. Je suppose que les sous-vues ajoutées interceptent l'événement. J'ai essayé d'appeler resignFirstResponder sur les sous-vues en vain.Ne pas recevoir les touchéesEnded/Moved/Canceled après l'ajout de subView

Le code fonctionne correctement lorsque je n'ajoute pas les vues enfants et que les événements tactiles sont appelés normalement.

Des idées?

Merci

EDIT: Un peu de détails et comment je l'ai fixé. Fondamentalement, j'avais une vue principale avec quelques sous-vues, quand j'ai touché la sous-vue, l'événement serait transmis à la vue principale, mais sur cet événement, je supprimais les sous-vues et en ajoutant de nouvelles à leur place. Le fait que le toucher provienne d'une sous-vue qui n'existait plus signifiait que le reste du toucher était perdu.

Je fixe en surchargeant hitTest: withEvent à mon avis maître, d'arrêter touche jamais à vous faire tester contre les sous-vues

+2

N'importe quel code? +++++ – kennytm

+0

Hmmm, eh bien le code est assez complexe, mais j'ai codé l'exemple le plus simple possible pour poster ici et ça a bien fonctionné ... donc +1 pour le nudge dans la bonne direction ...... ........ postera quand j'ai compris la différence – Sam

Répondre

8

Avez-vous essayé de définir la propriété userInteractionEnabled à NO pour la sous-vue avant de l'ajouter en tant que sous-vue?

+0

non, cela semble prometteur, va essayer ... – Sam

+0

Peut-être que certaines sous-vues (s) consommé cet événement en mettant en œuvre un mal formé -touchesEnded: withEvent? – ZhangChn

1

Vous allez avoir besoin de passer le contact de la sous-vue sur le superview en utilisant quelque chose comme ceci:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

    [super touchesBegan:touches withEvent:event]; 
} 
+0

les sous-vues ne reçoivent pas non plus l'événement. Si j'ajoute une sous-vue à l'endroit où l'événement touchesBegan s'est produit, ni la sous-vue ni le superview ne reçoivent touchesMoved/Canceled/Ended – Sam

+3

Cela passe le contact à la superclass, pas au superVIEW. ;) – Pascal