2012-01-13 15 views
5

Aquí está la idea:Cómo bloquear eventos NSView en otro NSView?

Tengo una NSWventana que contiene 2 NSView, llamémosles ViewA y ViewB.

ViewA tiene una lista de objetos de subvista, cada objeto tiene su propio conjunto de área de seguimiento y maneja un evento mouseDown. ViewB es una vista oculta, que aparece sobre ViewA.

El problema es cuando aparece ViewB, ViewA aún recibe eventos mouseDown. Entonces cuando hago clic en ViewB, el objeto detrás de ViewB recibe el evento mouseDown. Me gustaría saber si hay alguna forma de bloquear los eventos de ViewA mientras ViewB lo supera.

Sé que puedo eliminar el área de seguimiento de cada objeto, pero todavía responde al evento mouseDown.

Respuesta

-5

También puede desactivar los eventos de toque para viewa por [ViewA setAcceptsTouchEvents:NO]; y parece ser el camino de nuevo según sus necesidades mediante el establecimiento de YES nuevo.

+0

Creo que solo afecta los eventos * touch * (es decir, los gestos específicos del trackpad). Esperaría que los eventos de mouse y teclado continúen funcionando con ese conjunto en NO. – ipmcc

0

Si la vista B es una subvista de A, el problema es que está oculta. No lo ocultes: simplemente establece su opacidad en 0. De esa forma no lo verás, pero la cadena de respuesta lo hará.

+0

ViewB es una subvista de NSWindow, también. Pero intentaré esto. ¡Gracias! – QyoDeveloper

1

Puede anular el método sendEvent: en NSWindow y probar 'firstResponder', si es ViewA, entonces no llame al [super sendEvent:event] para que ViewA no reciba ningún evento.

0

En caso de que alguien todavía esté buscando respuestas para este tipo de preguntas hoy en día, solo logré hacer esto con una ventana hija, solución descrita en this accepted answer. Además, si usted quiere hacer la ventana transparente (/ color claro), pero aún así recibir los eventos del ratón sobre ella, poner esta línea en acción, así:

[overlayWindow setIgnoresMouseEvents:NO]; 
0

hermanos ve bloque, vistas descendientes dont ya que el niño propulsar eventos de mouse aguas arriba a su padre. Para bloquear a los descendientes que propenden eventos a sus padres, debes sobreescribir el evento en el niño y no llamar a super en el mismo evento. Llamar a súper propulsará el evento a su padre. Aquí hay una explicación completa sobre los eventos y las vistas descendentes/descendentes de hittesting: (se advirtió que es denso) http://stylekit.org/blog/2016/01/28/Hit-testing-sub-views/