2011-08-20 22 views
5

Todo, Tengo una subclase de NSBox y tengo una subescala como una etiqueta y dos imageViews. He anulado menuForEvent: en él. Sin embargo, cuando hago clic en NSBox para seleccionarlo y luego Control + clic en cualquiera de sus subvistas, nunca se llama a menuForEvent:.Control + haga clic en el menú que no se activa Para el evento

No entiendo por qué es así.

+0

Tengo lo mismo en una tabla ... le haré saber lo que encuentro. –

Respuesta

1

es necesario implementar menuForEvent: en los subvistas también, y transmita el evento a (NSBox subclase) de su supervista implementación de menuForEvent:

- (NSMenu *)menuForEvent:(NSEvent *)event 
{ 
    return [[self superview] menuForEvent:event]; 
} 

supuse que caería de forma automática a través de la supervista sin el necesidad de subclasificar las subvistas. Descubrí que un clic derecho sí lo hace, pero, por alguna razón, un control-clic no lo hace.

+0

Esto realmente resuelve el problema sin dolor, ¡gracias! – duncanwilcox

4

hay una diferencia en la forma de control de clics y el clic derecho son manejados por NSView (como se señaló jfewtr). Los menús contextuales aparecerán en un haciendo clic con el botón derecho en si el clic se encuentra dentro de una subvista, pero no para un control-clic en.

Me sorprendió por esto y de hecho escribió un post sobre ello con más detalles aquí: NSView control-click quirks

Hay un par de soluciones potenciales, pero primordial/personalización de toda su árbol subvista probablemente no es la mejor opción. He encontrado la mejor solución para esto es para mostrar su menú contextual de forma explícita en su vista de nivel superior (la subclase NSBox) para un control-clic:

- (void)mouseDown:(NSEvent *)theEvent 
{ 
    if (theEvent.modifierFlags & NSControlKeyMask) 
    { 
     [NSMenu popUpContextMenu:[self menuForEvent:theEvent] withEvent:theEvent forView:self]; 
    } 
} 

Si bien no es grande para codificar este comportamiento, se evita manipular o atravesar todo el árbol de la subvista, lo que puede ocasionar efectos secundarios/errores más problemáticos.

Cuestiones relacionadas