2010-06-03 8 views
2

I ont une vue qui contient quelques sous-vues:Est-il possible d'obtenir un NSView pour passer rightMouseDown: au répondeur suivant sans sous-classe?

mainView 
    subViewA 
    subViewB 
    SubViewC 

mainView est un NSView construit à partir d'une pointe et est commandé avec une sous-classe NSViewController. Les sous-vues sont des vues standard telles que NSTextField et NSImageView et sont configurées pour être non modifiables. Je veux mainView pour recevoir rightMouseDown: même lorsque l'événement est déclenché dans l'une des sous-vues.

L'implémentation par défaut de rightMouseDown: dans NSResponder transmet l'événement au répondeur suivant, mais NSView modifie le comportement par défaut et ne le transmet pas au répondeur suivant.

Je pourrais sous-classer toutes les sous-vues mais cela ne semble pas une solution très élégante ou maintenable.

Comment puis-je obtenir les sous-vues pour passer rightMouseDown: messages au répondeur suivant sans sous-classez toutes les sous-vues?

Répondre

0

Ma solution est d'ajouter un sous-vue à la mainView que je l'ai appelé clickCatcher. clickCatcher est transparente et égale en taille à mainView et est ajouté afin qu'il soit le plus haut sommet vue:

[self addSubview:clickCatcher positioned:NSWindowAbove relativeTo:nil]; 

Les méthodes de XXXmouseDown:clickCatcher appel superview.

0

Remplacer NSApplication de - (void) sendEvent:

- (void)sendEvent:(NSEvent *)event { 
    if([event type]== NSRightMouseDown) 
    redirect to wherever 
    else 
    [super sendEvent:event]; 
} 
1

Cela est généralement effectué en remplaçant la méthode -hitTest: de superviews?