2012-01-13 12 views
5

Ecco l'idea:Come bloccare gli eventi NSView con un altro NSView?

Ho un NSWindow contenente 2 NSView, chiamiamoli ViewA e ViewB.

ViewA ha un elenco di oggetti di sottoview, ogni oggetto ha la propria area di tracciamento impostata e gestisce un evento mouseDown. ViewB è una vista nascosta, che appare sopra ViewA.

Il problema è quando si visualizza ViewB, ViewA riceve ancora eventi mouseDown. Quindi quando clicco su ViewB, l'oggetto dietro ViewB riceve l'evento mouseDown. Vorrei sapere se c'è un modo per bloccare gli eventi di ViewA mentre ViewB è su di esso.

So che posso rimuovere l'area di tracciamento da ogni oggetto, ma risponde comunque all'evento mouseDown.

risposta

-5

è inoltre possibile disabilitare gli eventi di tocco per ViewA entro [ViewA setAcceptsTouchEvents:NO]; e possono riattivarli secondo le proprie esigenze impostando nuovamente YES.

+0

Credo che influenzi solo gli eventi * touch * (ad esempio, i gesti specifici del trackpad). Mi aspetto che gli eventi mouse e tastiera continuino a funzionare con quello impostato su NO. – ipmcc

0

Se la vista B è una sottoview di A, il problema è che è nascosto. Non nasconderlo: imposta la sua opacità a 0. In questo modo non lo vedrai, ma la catena del risponditore lo farà.

+0

ViewB è anche una sottoview della NSWindow. Ma ci proverò. Grazie! – QyoDeveloper

1

È possibile eseguire l'override del metodo sendEvent: su NSWindow e testare "firstResponder", se è ViewA, anziché chiamare [super sendEvent:event] in modo che ViewA non riceva alcun evento.

0

Nel caso in cui qualcuno cerchi ancora una risposta per questo tipo di domande al giorno d'oggi, sono riuscito a farlo solo con una finestra secondaria, soluzione descritta in this accepted answer. Inoltre, se si desidera rendere la finestra trasparente (/ colore chiaro), ma continuare a ricevere gli eventi del mouse su di esso, mettere questa linea in azione così:

[overlayWindow setIgnoresMouseEvents:NO]; 
0

Sibling viste blocco, vista discendente dont come il bambino propina gli eventi del mouse a monte al suo genitore. Per bloccare i discendenti che propongono eventi ai loro genitori, è necessario oltrepassare l'evento nel bambino e non chiamare super sullo stesso evento. Chiamando super si regeggerà l'evento al suo genitore. Ecco un'esplosione completa su Eventi e punti di vista discendenti/discendenti (si noti che è denso) http://stylekit.org/blog/2016/01/28/Hit-testing-sub-views/

Problemi correlati