2012-01-13 191 views
5

這裏的想法:如何阻止其他NSView下的NSView事件?

我有一個NSWindow包含2個NSView,我們稱他們爲ViewA和ViewB。

ViewA有一個子視圖對象列表,每個對象都有自己的跟蹤區域集合並處理mouseDown事件。 ViewB是一個隱藏的視圖,它出現在ViewA上方。

問題是當ViewB出現時,ViewA仍然收到mouseDown事件。所以當我點擊ViewB時,ViewB背後的對象會收到mouseDown事件。我想知道在ViewB結束時是否有任何方法阻止ViewA的事件。

我知道我可以從每個對象中刪除跟蹤區域,但它仍然響應mouseDown事件。

回答

-5

您還可以通過[ViewA setAcceptsTouchEvents:NO]; 禁用ViewA的觸摸事件,並可以通過再次設置YES再次按照您的要求啓用它們。

+0

我相信只會影響* touch *事件(即觸控板特定的手勢)。我希望鼠標和鍵盤事件可以繼續使用設置爲NO。 – ipmcc 2012-01-15 17:03:53

0

如果視圖B是A的子視圖,問題是它隱藏了。不要隱藏它:只要將其不透明度設置爲0.這樣你就不會看到它,但響應者鏈會。

+0

ViewB也是NSWindow的子視圖。但我會試試這個。謝謝! – QyoDeveloper 2012-01-16 17:18:47

1

您可以覆蓋NSWindow上的sendEvent:方法,並測試'firstResponder',如果它是ViewA,則不會調用[super sendEvent:event],因此ViewA不會收到任何事件。

0

如果任何人現在仍在尋找這類問題的答案,我只能設法通過子窗口來做到這一點,解決方案在this accepted answer中描述。另外,如果你想使窗口透明(/透明色),但仍然在它接收鼠標事件,就把這條線轉化爲行動,以及:

[overlayWindow setIgnoresMouseEvents:NO]; 
0

兄弟姐妹看待塊,後代的觀點不爲孩子向上遊推送鼠標事件。爲了阻止向其父母傳播事件的後代,您必須在孩子身上覆蓋事件,並且不要在同一事件中致電超級事件。召喚超級會將事件推送給其父母。這裏是事件和擊中兄弟/降序視圖的全面探索:(被警告其密集)http://stylekit.org/blog/2016/01/28/Hit-testing-sub-views/