Voici l'idée: p>
J'ai un Nswindow contenant 2 Nsview, appelons-les vie et viewb. p>
Viewa a une liste des objets de sous-espagne, chaque objet dispose de sa propre zone de suivi et gère un événement MouseDown. Viewb est une vue cachée, qui apparaît au-dessus de la vie. p>
Le problème est que la ciVoise apparaît, la Viewa reçoit toujours des événements de MouseDown. Donc, lorsque je clique sur Viewb, l'objet derrière la fenêtre reçoit l'événement MouseDown. J'aimerais savoir s'il y a un moyen de bloquer les événements de la vie, tandis que Viewb est terminé. P>
Je sais que je peux supprimer la zone de suivi de chaque objet, mais elle répond toujours à l'événement MouseDown. P>
5 Réponses :
Si la vue B est une sous-vision de A, le problème est qu'il est caché. Ne le cache pas: il suffit de mettre son opacité à 0. De cette façon, vous ne le verrez pas, mais la chaîne du répondeur sera. p>
Viewb est également une sous-vision de Nswindow. Mais je vais essayer ça. Merci!
Vous pouvez également désactiver les événements tactiles de la vie de la vie par [Viewa Settacceptouchevents: Non]; Code>
et peut-on les permettre à nouveau selon votre condition en définissant
oui code> à nouveau. p>
Je crois que cela n'affecte que Événements i> Événements (c'est-à-dire des gestes spécifiques du trackpad). Je m'attendrais à ce que les événements de la souris et du clavier continuent de travailler avec cela non.
Vous pouvez remplacer SendEvent: code> méthode sur NSWINDOW et testez "FirSupePonder", si c'est une vue de la vie, que pas d'appel
[Super SendEvent: événement] code> SO Viewa ne recevra pas tout événement. p>
Si quiconque cherche toujours la réponse à ce type de questions, je n'ai réussi que pour le faire avec une fenêtre enfant, une solution décrite dans Cette réponse acceptée . En outre, si vous voulez faire la fenêtre transparente (/ claire de couleur), mais toujours recevoir des événements de souris dessus, mettez cette ligne dans l'action également:
[overlayWindow setIgnoresMouseEvents:NO];
Bloc de vue de la soeur, descendants Vues ne faisant pas que l'enfant se propagera des événements de la souris en amont de son parent. Pour bloquer les descendants propageant des événements à leur parent, vous devez analyser l'événement chez l'enfant et ne pas appeler Super sur le même événement. Appeler super propagera l'événement à son parent. Voici une explication complète sur les événements et les vues de frère / descendance des frères et de descendants: (soyez averti son dense) http://stylekit.org/blog/2016/01/28/hit-testing-sub-views/ p>