J'ai une série de vues imbriquées et j'ai besoin d'attraper l'événement mouseDown et faire la même chose quand l'une de ces vues est sélectionnée. Existe-t-il un moyen de dire à un superviseur de gérer des événements pour ses sous-vues? Est-ce la meilleure façon de gérer cela pour mettre une vue transparente sur toutes mes autres vues et avoir cette vue gérer les événements?Attraper les événements mouseDown des sous-vues. (Cocoa osx)
Répondre
Vos vues secondaires définissent-elles leur propre mouseDown:
?
Si elles ne définissent pas déjà leur propre -[… mouseDown:(id)event]
, elles doivent déjà transmettre leurs événements dans la chaîne du répondeur, ce qui devrait aboutir à votre vue d'ensemble. Sinon, (en plus de toutes les autres manipulations qu'ils doivent effectuer), ils doivent décider des événements que la vue supérieure doit également recevoir et appeler [super mouseDown:event]
pour ces événements.
Dans la vue supérieure, vous pouvez remplacer hitTest pour renvoyer la vue supérieure si le point est dans le rectangle de la vue supérieure. Cela empêchera l'événement souris d'aller à l'une des sous-vues.
- (NSView *)hitTest:(NSPoint)aPoint
{
return NSPointInRect(aPoint, self.frame) ? self : nil;
}
Notez que aPoint se trouve dans le système de coordonnées "frame" de la vue supérieure, et non ses limites.
Malheureusement, cela semble avoir cessé de fonctionner à partir de 10,8 – George
Cette version fonctionne pour convertir un point exprimé en coordonnées écran:
NSPointInRect([view convertPoint:[[view window] convertScreenToBase:point] fromView:nil], [view bounds]);
- 1. NSView de Cocoa obtenant des événements de MouseDown déments?
- 2. Attraper des événements de clavier dans une application Cocoa WebView
- 3. Silverlight 3 - ListBox: comment atteindre Scroll lisse et attraper les événements MouseDown/MouseUp
- 4. Cocoa/OSX UI tagging
- 5. Attraper des événements glisser sur une vue
- 6. Comment puis-je attraper des événements itunes?
- 7. Obtenir une fenêtre sans bordure pour recevoir des événements mouseMoved (Cocoa OSX)
- 8. Stockez les emplacements de mousedown
- 9. Double clic dans Cocoa OSX
- 10. Où sont les événements dans Cocoa Touch?
- 11. Comportement Cocoa Touch pour les événements
- 12. Accès direct aux événements de clavier sous OSX
- 13. Attraper des événements de souris pour un SplitContainerDesigner personnalisé
- 14. Attraper des événements SENS dans .NET, aucun attribut Guid
- 15. Comment puis-je attraper les événements de glisser de la souris dans un widget Dashcode?
- 16. Comment faire pour attraper les événements ouverts de fichier
- 17. événements Attraper de Iframe dans Firefox
- 18. Cocoa alternative pour les événements de carbone pour hotkeys globaux
- 19. Simuler des événements de souris à position aléatoire dans Cocoa
- 20. Comment déclarer des événements sur une bibliothèque de classes (DLL) et les attraper sur un formulaire?
- 21. Comment générer plusieurs événements mousedown avec des objets qui se chevauchent dans jQuery?
- 22. Un NSButton avec deux images combinées (Cocoa OSX)
- 23. Faire une sous-vue avec InterfaceBuilder dans Cocoa OSX
- 24. Instancier par programme un NSPopUpButtonCell dans Cocoa OSX
- 25. OSX Cocoa: Comment vérifier quelle fenêtre est active?
- 26. Modifier le texte du bouton d'annulation d'un NSOpenPanel (Cocoa OSX)
- 27. Déterminer si un NSOpenGLView a un contexte valide (Cocoa OSX)
- 28. Gestion d'un événement MouseDown indépendamment du contrôle
- 29. Attraper les exceptions polymorphically
- 30. Attraper les erreurs http
La valeur par défaut 'mouseDown:' dans NSResponder transmet déjà l'événement au répondeur suivant. Quelles classes sont vos sous-vues? Pouvez-vous les modifier, ou sont les prédéfinis (contrôles de l'interface utilisateur, etc.)? –
Mes sous-vues sont personnalisées NSViews. – Mike2012